2011-04-06 162 views
4

到目前爲止,我正在創建一個classLibrary項目,並從exixting數據庫插入新的Ado.net實體數據模型和genareting。類和對象類代碼正在自動創建。 這對我來說並不重要。分離實體框架poco和objectcontext

但我想這樣做,並將ObjectContext類(例如:SomeEntities)和表classess分隔爲兩個calss庫。

當我更改數據庫表屬性,我會更新edmx模型和類將自動更新。

有沒有辦法做到這一點? 我不使用codefirst因爲有一個數據庫,並DATAS在裏面, 我沒有使用modelfirst同樣, 我使用databasefirst但既然你已經在你的標題是「POCO」我猜,你是不能單獨

+1

您仍然可以將CodeFirst用於現有數據庫。 – taylonr 2011-04-06 11:42:59

+2

@taylonr - 這不是代碼優先的,它使用DbContext API和數據庫優先。 Code-first =編寫代碼並讓EF生成DB。 Code-first!= DbContext API,它只是DbContext API的子集以及Code-first!=流暢映射,因爲您可以使用流暢映射到現有數據庫,這意味着數據庫是首先創建的,而不是代碼。 – 2011-04-06 21:28:48

+1

雖然您的評論是真實的,但它也表明人們使用的方法。很多時候,當人們說他們首先執行代碼時,他們意味着他們正在使用數據庫上下文和POCO。特別是在這種情況下,用戶正在談論他如何先做DB,這樣他就有了edmx。我應該更清楚一點,並說他可以用代碼優先的方式來做POCO,而不是覆蓋他的分貝。 – taylonr 2011-04-06 21:44:44

回答

8

使用EF4 POCO Generator T4模板。

然後是的,你可以將POCO類和ObjectContext分離成兩個不同的類庫。在T4模板是該方案准備,因爲它由兩個不同的文件:

  • POCOGenerator.Context.tt - >負責創建派生的ObjectContext
  • POCOGenerator.tt - >負責創建您的POCO實體

如果您在具有EDMX文件的類庫中添加POCO生成器,那麼默認情況下兩個tt文件都將添加到那裏。

但你可以移動,然後第二個文件(POCOGenerator.tt)到另一個類庫。 (上下文所在的EDMX項目需要引用該庫來識別POCO類。)然後在文本編輯器中打開該文件。一些在這個文件中的第一行會看起來像:

... 
string inputFile = @"MyModel.edmx"; 
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); 
... 

現在,您需要將路徑更改爲EDMX文件(僅在POCOGenerator.tt,離開POCOGenerator.Context.tt不變)。假設你有EDMX項目,並在Visual Studio中相同的解決方案POCO項目,新的路徑可能是:

... 
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx"; 
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); 
... 

現在,您可以從兩個不同的項目分別執行這兩個文件。一個將創建上下文文件,另一個將創建您的POCO文件。

+0

的描述是正確的。我在這裏回答了類似的問題:http:// stackoverflow。com/questions/5558996/where-to-place-the-entity-framework-in-our-solution/5559032#5559032你可以在那裏找到指向演練的鏈接。 – 2011-04-06 21:30:10

+0

謝謝你的回答 – barteloma 2011-04-07 08:40:25