C# 4.0 实体框架4,SQLCe,删除时出现POCO问题

C# 4.0 实体框架4,SQLCe,删除时出现POCO问题,c#-4.0,entity-framework-4,sql-server-ce,poco,C# 4.0,Entity Framework 4,Sql Server Ce,Poco,我有一个SQLCe数据库,它有一个唯一的主键Id,类型为uniqueidentifier,子关系为1到多,我将主Id保存在一列中,并为每一行附加唯一Id。现在,我将POCO实体用于我的域模型,而不是STE。虽然添加和修改实体可以正常工作,但我很难删除,比如说现在的单个子记录,当然假设它们有自己的主键。当我给出已删除列表并在附加第一个实体时遍历每个实体时,在第二个实体中我得到异常: ObjectStateManager中已存在具有相同密钥的对象。ObjectStateManager无法跟踪具有相同

我有一个SQLCe数据库,它有一个唯一的主键Id,类型为uniqueidentifier,子关系为1到多,我将主Id保存在一列中,并为每一行附加唯一Id。现在,我将POCO实体用于我的域模型,而不是STE。虽然添加和修改实体可以正常工作,但我很难删除,比如说现在的单个子记录,当然假设它们有自己的主键。当我给出已删除列表并在附加第一个实体时遍历每个实体时,在第二个实体中我得到异常:

ObjectStateManager中已存在具有相同密钥的对象。ObjectStateManager无法跟踪具有相同密钥的多个对象

我应该提到,在打开一个上下文时,我首先向数据库添加和修改任何实体…处理并调用另一个方法进行删除,当然,在该方法中打开另一个上下文,并且如果它成功地结束了处理


我不明白此异常的含义是什么?

当对象图中有同一实体的两个不同实例时,会发生此异常。此异常也发生在STE中,但有一个解决方法

基本上,您有两个实体(POCO),每个实体都与第三个实体有关系。当您尝试将第一个实体与第二个实体关联并尝试将其持久化到实体上下文中时,两个实体都将具有第三个实体的单独实例,这就是错误所在

解决方法:

在两个实体之间建立关联之前,请尝试将任何相关实体“合并”在一起。这使得实体上下文不需要决定“公共实体”的哪个实例要持久化

示例:

A、 (B1、B2)、C为实体

A--B1

C--B2

A--B1--C


在这个场景中,B1和B2都是B实体,只是不同的实例(可能是由于通过不同上下文对数据存储的不同调用)。如果要关联A和C,必须选择删除B2并将C链接到B1。

当对象图中有同一实体的两个不同实例时,会发生此异常。此异常也发生在STE中,但有一个解决方法

基本上,您有两个实体(POCO),每个实体都与第三个实体有关系。当您尝试将第一个实体与第二个实体关联并尝试将其持久化到实体上下文中时,两个实体都将具有第三个实体的单独实例,这就是错误所在

解决方法:

在两个实体之间建立关联之前,请尝试将任何相关实体“合并”在一起。这使得实体上下文不需要决定“公共实体”的哪个实例要持久化

示例:

A、 (B1、B2)、C为实体

A--B1

C--B2

A--B1--C

在这个场景中,B1和B2都是B实体,只是不同的实例(可能是由于通过不同上下文对数据存储的不同调用)。当您想要关联A和C时,必须选择删除B2并将C链接到B1