我有一个logEvent
表和一个名为logEventContact
的多对多表。
我的logEventContact
看起来像这样:
LogEventID ContactID
1 2
1 3
12 2
在我的edmx文件中,我的logEvent
表有Contacts
作为导航属性。 EF不会创建实体表logEventContact
。
我的editLogEvent()
函数如下所示:
public bool EditLogEvent(LogEvent logEvent)
{
var oldLogEvent = db.LogEvents
.Include(o => o.Contacts)
.Include(o => o.LogEventAttachments)
.Single(o => o.LogEventID == logEvent.LogEventID);
db.ApplyCurrentValues("LogEvents", logEvent);
db.SaveChanges();
var editedLogEvent = db.LogEvents
.Include(o => o.Contacts)
.Include(o => o.LogEventAttachments)
.Single(o => o.LogEventID == logEvent.LogEventID);
...
}
我的保存不适用于我的logEvents.Contacts
。我的editedLogEvent.Contacts
仍然与旧的{{1}}相同。
答案 0 :(得分:1)
最后我让它发挥作用。 EF对许多桌子的管理非常糟糕......
public bool EditLogEvent(LogEvent logEvent, out LogEvent editedLogEvent,...){
...
using (var db = new DistributorEntities()){
var oldLogEvent = db.LogEvents
.Include(o => o.Contacts)
.Include(o => o.LogEventAttachments)
.Single(o => o.LogEventID == logEvent.LogEventID);
oldLogEvent.Contacts.Clear();
foreach (var cont in logEvent.Contacts)
{
var contact = db.Contacts.SingleOrDefault(c => c.ContactID == cont.ContactID);
oldLogEvent.Contacts.Add(contact);
}
db.LogEvents.ApplyCurrentValues(logEvent);
db.SaveChanges();
var editedLogEvent = db.LogEvents
.Include(o => o.Contacts)
.Include(o => o.LogEventAttachments)
.Single(o => o.LogEventID == logEvent.LogEventID);
...
}
}