我想弄清楚構建我的解決方案的好方法。我知道我將使用以下技術,Asp.Net Webforms和Entity Framework 4.1。我的EF模型基於現有的數據庫。我打算使用EF DbContext生成器來構建我的上下文和實體。這是事情對我來說有點棘手的地步。在webforms中使用實體框架的正確抽象方法
我想妥善分離關注點,提供更好的可測試性,並允許將我的業務邏輯與DAL分開。我目前在我的解決方案中有三個項目:Web,Core和Data。我希望依賴關係是Web - >核心< - 數據,完全不依賴於Web和數據。這要求我的實體實際上存在於Core中,而不是Data(我的edmx在哪裏)。目前,我的想法是將Entities.tt文件移動到Core,並將inputFile更改爲指向Data中的我的edmx以在Core中生成我的實體。但我不確定如何處理上下文。它很大程度上依賴於EF,因此我不想簡單地將它移入Core。我考慮過連接它,創建自己的IEntities.Context.tt並將其放入Core中。我擔心的是如果我的界面不創建DbSets和DbContext,則會導致功能喪失。我一直對此有兩個想法,1)在Core中放置一個System.Data.Entity的引用,2)不使用DbSet,並用ICollection(或一些這樣的通用容器)替換它幷包裝DbContext作爲我的界面中的一個對象。
任何洞察力將不勝感激。謝謝。
爲什麼你不能讓上下文和Context.tt生成器留在你的數據項目中?我不認爲有必要將它移入Core。 Core當然必須引用數據庫中的上下文。這是你遇到的問題,你不想要什麼?如果是這樣,您將爲應用程序添加一個額外的複雜性和抽象層次,因爲您必須將EF從您的Core中抽象出來(抽象「存儲庫」和「工作單元」模式是通常的方式來執行此操作=關鍵字搜索)。儘管Core引用了數據,事情變得更加容易。 – Slauma
我在想Core不應該依賴於Data,而是提供Data和Web都可以使用的基本POCO對象。這完全將Web從數據中分離出來,並且允許更容易地將數據換出(即:如果我們想要移動到nHibernate或另一個ORM)。 –