在实体框架中将对象树附加到对象上下文

Posted

技术标签:

【中文标题】在实体框架中将对象树附加到对象上下文【英文标题】:Attaching an object tree to object context in Entity Framework 【发布时间】:2010-12-20 09:14:01 【问题描述】:

我有一个具有以下三种类型的 EDM:Foo、Bar 和 Foob。 Foob 是 Foo 的子类。 Foo 有一组 Bar 实体。 Bar 有一个 Foo 实体的集合。我想向集合中添加一个新的 Foo 对象,以及它的 Bar 和关联的 Foob 对象。这样下面的代码就可以工作了:

Foo foo = new Foo()Name = "Foo";
using(var ctx = new EntityContext())

ctx.Foo.Attach(foo);
Bar bar = new Bar();
bar.Items.Add(new Foob()Name="Foob1";
bar.Items.Add(new Foob()Name="Foob2";
foo.Bars.Add(bar);
ctx.SaveChanges();

但是上面的代码给了我下面的异常:

System.Data.SqlClient.SqlException:无法在具有唯一索引的对象“dbo.tblFoo”中插入重复的键行。

【问题讨论】:

尝试在 'ctx.SaveChanges();' 之后附加,因为我建议在保存更改后 db 已创建 foo 对象 id(以防自动增量设置为 true)。跨度> 【参考方案1】:

尝试在 SQL 探查器中检查为此执行的 sql 代码。可能是您忘记为 Foob 实体设置自动增量。

【讨论】:

以上是关于在实体框架中将对象树附加到对象上下文的主要内容,如果未能解决你的问题,请参考以下文章

认识EF框架中Attach与Entry

将实体附加到数据上下文

将对象添加到实体框架上下文大约需要 1.5 秒

是否需要处理实体框架上下文对象

实体框架对象上下文刷新

如何使用对象上下文在实体框架中使用批量插入?