使用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文件。
您仍然可以將CodeFirst用於現有數據庫。 – taylonr 2011-04-06 11:42:59
@taylonr - 這不是代碼優先的,它使用DbContext API和數據庫優先。 Code-first =編寫代碼並讓EF生成DB。 Code-first!= DbContext API,它只是DbContext API的子集以及Code-first!=流暢映射,因爲您可以使用流暢映射到現有數據庫,這意味着數據庫是首先創建的,而不是代碼。 – 2011-04-06 21:28:48
雖然您的評論是真實的,但它也表明人們使用的方法。很多時候,當人們說他們首先執行代碼時,他們意味着他們正在使用數據庫上下文和POCO。特別是在這種情況下,用戶正在談論他如何先做DB,這樣他就有了edmx。我應該更清楚一點,並說他可以用代碼優先的方式來做POCO,而不是覆蓋他的分貝。 – taylonr 2011-04-06 21:44:44