2

我正在尝试实现 UoW 和存储库模式,但出现错误

一个实体对象不能被多个 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

附言

我在这个存储库中没有收到任何错误,但是另一个太长了,这个只是作为示例。

4

2 回答 2

1

看看这个SO answer,我在其中描述了一种将 Uow 从存储库中解耦的方法。

于 2013-05-30T08:04:51.490 回答
1

你试过这个吗

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-应用程序

我认为它更具描述性,我曾经见过。

于 2013-05-30T08:17:19.887 回答