我是EF4的新手,我正试图从多对多关系中插入一条记录。我有3张桌子:
问题在于,当我调用SaveChanges()时,它会抛出一个异常并且它试图在B中插入一条新记录。我不想这样,它应该只是添加链接。这是我的代码:
var a = new A(){Description="Example"};
var b = context.B.Single(B => B.ID == paramID);
a.B.Add(b);
context.A.AddObject(a);
context.SaveChanges() <---- here it throws the exception
从我的研究中,上面的代码应该和A的新记录并在A和B之间创建一个链接并将其存储在AB表中,对吗?
我错过了什么?
编辑:
这是我得到的例外:
无法将值NULL插入“MIC”列,表'dbo.B';列不允许空值。 INSERT失败。\ r \ n语句已终止。
如果你注意到,我只是试图添加多对多链接而不是在表B中创建新记录。我甚至试图将aB留空,它仍然抛出上述异常。
答案 0 :(得分:2)
在将A
添加到集合之前,您可以尝试将B
附加到上下文中:
var a = new A { Description = "Example" };
var b = context.B.Single(B => B.ID == paramID);
context.A.AddObject(a);
a.B.Add(b);
context.SaveChanges();
不幸的是我现在没有机会对此进行测试,但我的猜测是,在向上下文添加A
时,EF会将B
集合中对象的状态设置为{{ 1}}。在这种情况下,这应该解决问题。
或者您可以尝试反过来 - 将Added
添加到A
列表中:
B
在您的情况下,这看起来似乎更简洁。