实体框架3.5多对多更新问题

时间:2014-09-01 18:10:59

标签: c# wpf entity-framework

亲爱的StackOverflow社区,

我在更新EF 3.5中的多对多关系时遇到问题:

但首先,在这里你可以看到我的表格:

Table "Message":

ID, int (primary key)
Message, string

Table "DisplayDestinations":

ID, int (primary key)
Destination, string

My DisplayDestinations are:

ID;Destination:

1;PC
2;Mobile
3;Printer
4;PDF

我认为你可以想象一个"消息"可以有多个DisplayDestinations。

我可以插入和删除"消息"或单个" DisplayDestinations"。但如果我想更新它们,我会收到错误。

EF 3.5想要创建一个新的" DisplayDestinations"但我没有任何代码可以做到这一点...

这是我的更新方法。它可以解决不方便,但为什么我不能更新这个:

List<DisplayDestinations> CorrectMDfromMDs = new List<DisplayDestinations>(); // Holds the real DisplayDestinations with the right ID and Destination
      foreach (Message item in Messages)
      {
        // Get all DisplayDestinations with the EntityState Added or Modified to know which to add.
        var ChangedMDs = item.DisplayDestinations.Where(x => x.EntityState == System.Data.EntityState.Added || x.EntityState == System.Data.EntityState.Modified);

        foreach (MD md in ChangedMDs)
        {
          CorrectMDfromMDs.Add(DBService.GetMDs().FirstOrDefault(x => x.ID == md.ID));

        }

        // delete the DisplayDestinations from the Message which modified or added state, because they aren't the right from my DisplayDestinations
        while (ChangedMDs.Count() > 0)
        {
          item.MDs.Remove(ChangedMDs.ElementAt(0));
        }

        // Add the right DisplayDestinations to the Message
        foreach (var md in CorrectMDfromMDs)
        {
          item.MDs.Add(md);
        }

        CorrectMDfromMDs.Clear();
      }
      DBService.SaveChanges();

之后,我得到一个异常,即DisplayDestinations中的Destination不能为NULL。我认为EF 3.5试图在DisplayDestinations中添加一个新的DisplayDestination,但为什么呢?

我试过这个Insert/Update Many to Many Entity Framework . How do I do it?但没有成功。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您在(x =&gt; x.ID == md.ID)上调用FirstOrDefault

我猜测已添加 EntityState.Added 的内容尚未存在于数据库中。 它们是从Linq表达式返回null(默认值)的那些。

如果说没有多余的解释CorrectMDfromMDs现在有一些Null项目。