亲爱的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?但没有成功。
提前谢谢!
答案 0 :(得分:0)
您在(x =&gt; x.ID == md.ID)上调用FirstOrDefault
我猜测已添加 EntityState.Added 的内容尚未存在于数据库中。 它们是从Linq表达式返回null(默认值)的那些。
如果说没有多余的解释CorrectMDfromMDs现在有一些Null项目。