Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 工作单位+;存储库模式和实体框架模拟_Asp.net_Entity Framework_Repository Pattern_Impersonation_Unit Of Work - Fatal编程技术网

Asp.net 工作单位+;存储库模式和实体框架模拟

Asp.net 工作单位+;存储库模式和实体框架模拟,asp.net,entity-framework,repository-pattern,impersonation,unit-of-work,Asp.net,Entity Framework,Repository Pattern,Impersonation,Unit Of Work,我在应用程序中使用了UnitOfWork和Repository模式 实际上,我的设计提供了UnitOfWork将创建ObjectContext类并将其注入到存储库的具体类中。例如: UnitOfWork.cs(初始化) UnitOfWork.cs(获取存储库实例) 这样,存储库类就有了一个已经定义的ObjectContext类,它们可以使用它的方法来检索和更新数据。 这个很好用 现在我需要执行模拟应用程序池标识的查询,因此我决定将代码包装在模拟中UnitOfWork的构造函数中 不幸的是,这不起

我在应用程序中使用了UnitOfWork和Repository模式

实际上,我的设计提供了UnitOfWork将创建ObjectContext类并将其注入到存储库的具体类中。例如:

UnitOfWork.cs(初始化)

UnitOfWork.cs(获取存储库实例)

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

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

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

我曾经体验过,与数据库的真正连接是在按实体框架进行查询之前建立的,而不是在创建
ObjectContext
本身时建立的


如何解决此问题?

您可以使用一个或多个ObjectContext工厂(创建ObjectContext),使用不同的创建条件,例如连接字符串。您的UnitOfWork可以利用工厂来获取其上下文,存储库也可以,但是如果UnitOfWork利用的是与存储库不同的ObjectContext,那么我认为您已经错过了UnitOfWork的要点

一个UnitOfWork应该由一个或多个应该一起完成的操作组成,这可以很容易地利用多个存储库。如果存储库有自己的ObjectContext与UnitOfWork分开,我看不出提交UnitOfWork将如何实现它的目的

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

public DefaultUnitOfWork() {
    if (_context == null) {
        _context = new MyDataContext(ConfigSingleton.GetInstance().ConnectionString);
    }
}
public CustomerRepository Customers {
    get {
        if (_customers == null) {
            _customers = new CustomerRepository(_context);
        }
        return _customers;
    }
}