2013-05-29 48 views
2

我試圖實現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.

我沒有得到任何錯誤,在這個倉庫,但其他人太長時間,這其中起到同樣的樣品。

+0

爲什麼要創建上下文類的多個實例?你有這個具體原因嗎? – Moeri

回答

1

看一看這個SO answer,我描述了一種從庫decoulple UOW。