重复持久性:具有实体框架的存储库模式

时间:2014-12-08 08:47:20

标签: .net entity-framework repository-pattern

如何避免将一个实体持久化两次,如下面的代码所示?

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的情况下获得身份。所以看起来我需要以某种方式设置身份。谢谢!

0 个答案:

没有答案