0

我在EF的应用程序中使用了UnitOfWork和Repository模式。UnitOfWork +存储库模式和实体框架模拟

实际上,我的设计规定UnitOfWork将创建ObjectContext类并在Repository具体类中注入内容。例如:

UnitOfWork.cs(初始化)

public DefaultUnitOfWork() { 
    if (_context == null) { 
     _context = new MyDataContext(ConfigSingleton.GetInstance().ConnectionString); 
    } 
} 

UnitOfWork.cs(得到一个存储库实例)

public CustomerRepository Customers { 
    get { 
     if (_customers == null) { 
      _customers = new CustomerRepository(_context); 
     } 
     return _customers; 
    } 
} 

存储库类有一个已定义这样的ObjectContext类,他们可以使用它的方法来检索和更新数据。 这工作很好。

现在我需要执行我的查询模拟应用程序池标识,因此我决定将代码包装在模拟中的UnitOfWork构造函数中。

不幸的是,这不起作用,因为ObjectContext然后传递给存储库构造函数,稍后在存储库的客户端调用时使用,例如FindAll()

我已经体会到,在通过实体框架进行查询之前就已经确定了与数据库的真正连接,而不是在我创建ObjectContext本身时。

我该如何解决这个问题?

回答

0

例如,您可以使用一个或多个ObjectContext工厂(创建ObjectContexts),并使用不同的创建条件(例如连接字符串)。你的UnitOfWork可以利用一个工厂来获得它的上下文,仓库也是如此,但是我认为如果它利用与你的Repository不同的ObjectContext,你就错过了UnitOfWork的观点。

UnitOfWork应由一个或多个应该一起完成的操作组成,这些操作可以轻松地利用多个存储库。如果这些存储库有自己的ObjectContexts与UnitOfWork分开,我没有看到如何提交UnitOfWork来达到它的目的。

我想我要么完全误解了你的问题,要么你遗漏了一些相关的细节。祝你好运!