各イベントのフラグのリストを保存したいと思います。これを成し遂げるためには、私は私のコントローラに以下の方法を使用しています:私のApplicantRepositoryで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);
}
を私は次のメソッドを使用します。
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で)。
これらは私のモデルです:
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; }
}
にはどうすればFlagEventと呼ばれる私の中間テーブルで参照簡単なセットにEFを伝えることができますか?
単一 'VisitorRegistrationContext'インスタンスを使用します。 – Maarten