2011-08-29 65 views

回答

1

据我所知,该行

Repository.Properties.AddObject(P); 

试图将检体P添加到当前库中,并且因为你从不同的存储库得到它你需要将其删除(或将其从另一个存储库中分离出来)。编辑:所以我假设在仓库的某个地方,有一个包装的DataContext(或者也许Repository继承你的DataContext。当你从一个DataContext获得一个对象时,这个对象不断被一个变化跟踪器引用,如果您更新该对象需要将数据发送回数据库因为您不希望对任何对象进行重复计数,所以EF会阻止您一次将该对象附加到多个数据上下文。该对象到一个新的数据上下文,你需要分离它从已追踪它的DataContext。

要做到这一点,你需要调用对象的分开方法,它引用是任何对象还由EF跟踪。如何做到这一点的一个很好的例子是:http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

+0

(DataLayer.IAccrualRepository)存储库是一个接口,它具有一个IObjectSet 属性。但如何从存储库中删除它,因为我没有任何直接连接到实体对象。 –

+0

然后你可能没有正确的抽象。如果您无法查看实体集合,则可能需要创建一个新对象并复制其所有属性。 Automapper是很好的:http://automapper.codeplex.com –

+0

尝试不同的方式foreach(属性P中的属性) { AccrualTrackingEntities DataContext = new AccrualTrackingEntities(); DataContext.Detach(P); DataContext.Properties.AddObject(P); DataContext.SaveChanges(); }但它表示它不存在于对象状态管理器中。 –

相关问题