2

我已經爲我的域(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和回購)正在引用原始的dll。所以我更新它們,但是然後MVC層在App_Start/SQLCEEntityFramework.cs中有問題

我做了什麼錯了?我是否應該在應用程序的另一部分中創建OnModelCreating,並重置所有對原始EFCodeFirst0.8/lib/EntityFramework.dll的引用?或者修復App_Start/SQLCEEntityFramework.cs中的錯誤?

感謝所有,

詹姆斯

回答

0

你做錯了:)

實在是在POCO,倉庫模式沒有意義的,並打算所有的東西爲持久性的無知 ,當你有無處不在的實體框架引用,並且你的域與它綁定時。

你的域名應該是純粹的類庫(有類似componentmodel的東西,當然是dataannotations),而不需要引用EF。

然後你應該在你的MVC應用程序和「所有可能的存儲庫」之間有「契約」(即接口,在另一個類庫中) - 也是EF不可知的。

最後你有這個合同的「特定實現」 - 你的EF倉庫。這應該是引用EF庫的唯一項目。問題是,如果你的老闆出現並說「OK,我們切換到nhibernate」,你應該重播「沒問題,我只需編寫另一個實現這個接口的庫,並在IoC容器配置中更改1行」。作爲獎勵,你可以只在1個地方更新你的EF引用:)

+0

好吧,如果我有一個Project.IRepository類庫,服務層與/知道,然後Project.EFRepository與包含對EF的引用的Project.IRepository類的實現有dbContext?我可以在我的MVC圖層中刪除對EF的引用嗎? – James

+0

絕對正確。 – rouen

+0

感謝rouen,認爲它現在開始有很大的意義! – James