我試圖實現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.
我沒有得到任何錯誤,在這個倉庫,但其他人太長時間,這其中起到同樣的樣品。
爲什麼要創建上下文類的多個實例?你有這個具體原因嗎? – Moeri