如何避免将一个实体持久化两次,如下面的代码所示?
class EntityA { public int Id {get;set;} public EntityB B {get;set;} }
class EntityB { public int Id {get;set;} public EnittyA A {get;set;} }
class EntityC { public int Id {get;set;} public EntityB B {get;set;} }
class Service {
public void DoWork()
{
var a = new EntityA();
var b = new EntityB();
a.B = b;
b.A = a;
// ...
var c = new EntityC();
c.b = b;
_entityCRepository.Save(c); // b and a are persisted also!
// ...
_entityARepository.Save(a); // b and a are persisted second time!
}
}
我正在使用隐藏在Repository背后的EntityFramework6。它将它获取的对象映射到对象中以实现持久性。映射会像上面那样获得一些链接对象的重复,并且这些对象也会在现在实现时保持不变。
我认为它需要以某种方式为持久化对象设置标识。或者可能存储库应该这样做。但是我不确定EF6是否在没有提交db的情况下获得身份。所以看起来我需要以某种方式设置身份。谢谢!