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
Entity framework 实体框架的抽象访问_Entity Framework_Asp.net Mvc 3_Linq To Entities - Fatal编程技术网

Entity framework 实体框架的抽象访问

Entity framework 实体框架的抽象访问,entity-framework,asp.net-mvc-3,linq-to-entities,Entity Framework,Asp.net Mvc 3,Linq To Entities,我在EF中有一个名为Registry的实体,我用它来抛出各种有用的东西。我的典型查询如下所示: db.Registry .Where(x => x.Domain == "SomeDomain" && x.Key == "SomeKey") .Select(x => x.Value) .Single(); 其中,db是类型为EFContainer的变量。与其到处都是这样的查询,我想写一些更简单的东西,比如: Registry.Get(Key: "So

我在EF中有一个名为Registry的实体,我用它来抛出各种有用的东西。我的典型查询如下所示:

db.Registry
   .Where(x => x.Domain == "SomeDomain" && x.Key == "SomeKey")
   .Select(x => x.Value)
   .Single();
其中,
db
是类型为
EFContainer
的变量。与其到处都是这样的查询,我想写一些更简单的东西,比如:

Registry.Get(Key: "SomeKey", Domain: "SomeDomain")
但问题是,为了让该方法访问数据库,它需要实例化
EFContainer
,当它实例化时,我开始出现错误,Entity change tracker无法处理第二个连接。我想我可以将我的
db
变量传递给该方法,但这很糟糕


实现这一点的好方法是什么?

实现这一点的典型方法是创建RegisterRepository,并将EFContainer注入到存储库的构造函数中,或者注入用于创建容器的机制

public class RegistryRepository {
public RegistryRepository(EFContainer db) {
  this.db = db;
}

readonly EFContainer db;

public Registry Get(string domain, string key) {
// implementation here
}

}

在此实现中,您必须考虑如何获得对存储库的引用,从而将如何构建存储库。您可以使用框架注册EF容器和具有适当生存期范围的存储库。例如,如果您正在开发一个ASP.NET应用程序,EF上下文的范围将与存储库一样由HTTP请求确定。

因此无需绕过容器。叹息。。。但是谢谢你的依赖注入链接!(对我来说是新的内容)顺便说一句,我发现实例化容器两次确实没有问题,只要你不混合使用它们,即object-from-container-1.property=object-from-container-2