我已经为我的域(POCO)和存储库设置了单独的类库的MVC应用程序。现在我的DbConxet目前在域层,我想添加以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
但它无法找到DbModelBuilder。现在我检查了我的引用并注意到它引用了EFCodeFirst0.8 / lib / EntityFramework.dll当我将其更改为EntityFramework4.2.0.0 / lib / EntityFramework.dll时,DbModelBuilder可用但我收到错误,因为我的解决方案中的其他项目( MVC和Repo)引用了原始的dll。所以我更新它们但是然后MVC层在App_Start / SQLCEEntityFramework.cs中有问题
我做错了什么?!我应该在我的应用程序的另一部分中使用OnModelCreating并重置对原始EFCodeFirst0.8 / lib / EntityFramework.dll的所有引用吗?或者修复App_Start / SQLCEEntityFramework.cs中的错误?
全心全意,
詹姆斯
答案 0 :(得分:0)
你做错了:)
POCO,存储库模式以及用于持久性无知的所有内容实际上没有意义,当您在任何地方引用实体框架并且您的域与之绑定时。
您的域应该是纯类库(当然还有组件模型,数据注释等),而不引用EF。
然后你应该在你的MVC应用程序和“所有可能的存储库”之间有“契约”(即接口,在另一个类库中) - 也是EF不可知的。
最后,您拥有该合同的“一个特定实现” - 您的EF存储库。这应该是引用EF库的唯一项目。
关键是,如果你老板来了,说“好吧,我们切换到nhibernate”,你就可以重播“没问题,我只需要编写另一个实现此接口的存储库,并在IoC容器配置中更改1行” 。作为奖励,您只能在1个地方更新您的EF参考:)