Entity framework 实体框架的抽象访问
我在EF中有一个名为Registry的实体,我用它来抛出各种有用的东西。我的典型查询如下所示: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
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