使用EF 4.0问题导航属性编辑对象未更新

时间:2013-09-18 17:51:31

标签: c# entity-framework

我有一个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}}相同。

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);
            ...
    }
}