实体框架统一工作和存储库模式

时间:2013-05-29 17:05:34

标签: entity-framework repository-pattern unit-of-work

我正在尝试实现UoW和Repository模式,但是我收到了错误

IEntityChangeTracker的多个实例无法引用实体对象。

我知道我收到了这个错误,因为我有两个创建两个不同DBContext的存储库,但我不知道为什么会这样。

这是我的UoW代码

 public  class UnitOfWorkRepositoryRepository : IUnitOfWorkRepository
{
    private readonly IDatabaseFactory _databaseFactory;
    private DatabaseContext _databaseContext;

    public UnitOfWorkRepositoryRepository(IDatabaseFactory databaseFactory)
    {
        _databaseFactory = databaseFactory;
    }

    public DatabaseContext Database
    {
        get { return _databaseContext ?? (_databaseContext = _databaseFactory.GetDatabaseContext()); }
    }

    public void Save()
    {
        _databaseContext.Save();
    }


}

这里有示例存储库:

  private static readonly DatabaseFactory DatabaseFactory = new DatabaseFactory();
    private static readonly UnitOfWorkRepositoryRepository UnitOfWorkRepositoryRepository = new UnitOfWorkRepositoryRepository(DatabaseFactory);

    public User GetUserById(int id)
    {
        return UnitOfWorkRepositoryRepository.Database.Users.SingleOrDefault(u => u.UserId.Equals(id));
    }

怎么了?我该如何实施UoW

P.S。

我在这个存储库中没有收到任何错误,但是其他错误太长了,这个错误就像样本一样。

2 个答案:

答案 0 :(得分:1)

看看这个SO answer我在哪里描述了从存储库中取消Uow的方法。

答案 1 :(得分:1)