2012-08-30 15 views
14

我注意到在VS2012中,當您創建一個新的EF模型(.edmx)時,DbContext是默認代碼生成和.tt(T4模板)文件現在嵌套在解決方案資源管理器中的.edmx文件的下。Visual Studio 2012 - 無法移動EF .tt文件

問題:有沒有辦法將這些.tt文件移動到另一個文件夾或項目?當我嘗試在Solution Explorer中拖放時,它不會允許我移動嵌套的.tt文件。

問題的詳細信息:以前(在VS2010)我曾經爲我的波蘇斯一個.TT文件移動到一個類庫稱爲DataDefinitions和我離開的其他.TT文件爲我叫數據訪問類庫上下文。現在看起來我無法移動這些文件......並將我的資產分離到不同的圖層中。

在這個MSDN文章,如果您滾動至底部,您可以看到的.TT文件,現在是如何嵌套在圖片... http://msdn.microsoft.com/en-us/data/jj613116

回答

23

這是一些新奇特的功能,使模板添加依賴於EDMX文件。您可以通過編輯項目的.csproj文件來修復它(您可以在記事本中執行此操作,也可以在VS中卸載項目並編輯它)。你會發現這樣的事情:

<None Include="Model.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <DependentUpon>Model.edmx</DependentUpon> 
    <LastGenOutput>Model.cs</LastGenOutput> 
</None> 

你只需要刪除DependentUpon元素和模板項目將成爲該項目的獨立的部分。

+0

此答案適合我,謝謝!順便說一句,我決定我會跟隨MS開發人員的想法,並將我所有的EF代碼保存在一個層中。我覺得在同一個類庫中有數據對象和數據訪問代碼有點麻煩,但是我不想與Visual Studio打成一片,一直「糾正」生成的文件。 – ClearCloud8

+1

我將繼續編輯.csproj文件。謝謝@拉迪斯拉夫 – vijiboy

+2

我討厭你要改變你的適當的建築,以適應microsofts蹩腳的設置。我不知道爲什麼微軟將實體和數據訪問層(上下文)放在同一個項目中。如果不能輕易修復這個問題,yoru用戶界面代碼將不得不直接引用您的DAL,而不是通過BLL,這在我看來確實違反了正確的N層架構。如果沒有經過BLL,用戶界面不應直接訪問DAL,以確保正確處理業務規則。 – Matt

2

我在EF數據模型的單獨項目中使用EF5.x DBContext。儘管刪除了Ladislav和here所述的項目文件中的DependentUpon條目,但這些類仍然出現在我的Model1.tt文件下。

爲了避開這個問題,我只好也從項目文件中每個表中刪除條目的一部分:

<Compile Include="MyTableName.cs"> 
    <DependentUpon>Model1.tt</DependentUpon> 
</Compile> 

<DependentUpon>標籤只有行應該被刪除而<Compile Include="...">標籤應保持。刪除整個條目將導致該文件從項目列表中消失。爲簡潔起見,可將這些條目縮短爲<Compile Include="MyTableName.cs"\>

0

不是編輯項目文件,而是向項目中添加一個名稱相同的EF模型,關閉解決方案,從另一個項目中複製模型文件,然後重新打開解決方案。我更改edmx屬性中的命名空間,然後重新編譯模型。

相關問題