2016-09-22 29 views
0

我想保存每個事件的標誌列表。爲了完成這件事,我用我的控制器下面的方法:EF6創建新的實體,而不是僅設置參考

public ActionResult CreateEvent(Models.Event newEvent) 
{ 
    if(!string.IsNullOrEmpty(Request.Form["flag"])) 
    { 
     string[] idArr = Request.Form["flag"].Split(','); 
     foreach(string idString in idArr) 
     { 
      int id = idString.ToInt32(); 
      newEvent.Flags.Add(_applicantRepository.GetFlagByID(id)); 
     } 
    } 
    _applicantRepository.SaveEvent(newEvent); 
} 

在我ApplicantRepository我用下面的方法:

public void SaveEvent(Event ev) 
{ 
    using (var dbCtx = new VisitorRegistrationContext()) 
    { 
     dbCtx.Events.AddOrUpdate(ev); 
     dbCtx.SaveChanges(); 
    } 
} 

public Models.Flag GetFlagByID(int id) 
{ 
    using (var dbCtx = new VisitorRegistrationContext()) 
    { 
     Models.Flag flag = dbCtx.Flags.Find(id); 
     return flag; 
    } 
} 

不幸的是,每次我保存事件的一些新標誌將被創建。即使它們已經存在(使用相同的ID)。

enter image description here

這是我的模型:

public class Event 
{ 
    public Event() 
    { 
     Users = new List<Usr>(); 
     Type = new EventType(); 
     Flags = new List<Flag>(); 
    } 

    public int ID { get; set; } 

    [Required] 
    [Display(Name = "Event")] 
    public string EventName { get; set; } 
    public string Comment { get; set; } 

    [Required] 
    public EventType Type { get; set; } 
    public ICollection<Flag> Flags { get; set; } 
} 

public class Flag 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool IsInactive { get; set; } 

    public virtual ICollection<Event> Events { get; set; } 


} 

我怎麼能告訴EF簡單的一套名爲FlagEvent我在中間表的參考?

+1

使用單'VisitorRegistrationContext'實例。 – Maarten

回答

1

您需要使用相同的背景,例如:

public void CreateEvent(Event newEvent) 
{ 
    var flags = "1,2,3"; 
    string[] idArr = flags.Split(','); 
    using (var ctx = new Context()) 
    { 
     foreach (string idString in idArr) 
      newEvent.Flags.Add(ctx.GetFlagByID(Convert.ToInt32(idString))); 
     ctx.Events.AddOrUpdate(newEvent); 
     ctx.SaveChanges(); 
    } 
} 
+0

它的工作原理。謝謝! – markai

相關問題