2012-08-30 12 views
14

DbContextがデフォルトのコード生成であり、.tt(T4テンプレート)ファイルである新しいEFモデル(.edmx)を作成すると、がVS2012にあります今すぐの下にネストされ、ソリューションエクスプローラの.edmxファイル。Visual Studio 2012 - EF .ttファイルを移動できません

質問:これらの.ttファイルを別のフォルダまたはプロジェクトに移動する方法はありますか?ソリューションエクスプローラでドラッグアンドドロップしようとすると、ネストされた.ttファイルを移動できなくなります。

問題の詳細:以前(VS2010で)私は、クラスライブラリと呼ばれるDataDefinitionsに私POCOSのための1つの.ttファイルを移動するために使用し、私はDATAACCESSと呼ばれるクラスライブラリの私のコンテキストのために他の.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コードを1つのレイヤーに保つことに決めました。データオブジェクトとデータアクセスコードを同じクラスライブラリに持たせるのはちょっと面倒ですが、生成されたファイルを常に修正するためにVisual Studioと戦う必要はありません。 – ClearCloud8

+1

私は先に進み、.csprojファイルを編集します。ありがとう@ Ladislav – vijiboy

+2

私はあなたの適切なアーキテクチャをマイクロソフトの安っぽいセットアップに合わせて変更しようとしているのは嫌です。マイクロソフトがなぜエンティティとデータアクセスレイヤ(コンテキスト)を同じプロジェクトに配置しているのかわかりません。これを簡単に修正できない場合は、ユーザーインタフェースコードがBLLを経由せずに直接DALを参照する必要があり、これは適切なN層アーキテクチャに違反しています。適切なビジネスルールが確実に処理されるように、UIはBLLを経由せずにDALに直接アクセスするべきではありません。 – Matt

2

私はEFデータモデルとは別のプロジェクトでDBContextを使用しています。 Ladislavとhereで述べたように、プロジェクトファイルのDependentUponエントリを削除したにもかかわらず、クラスはまだModel1.ttファイルの下に表示されていました。このラウンドを取得するには

は、私はまた、テーブルごとにプロジェクトファイルからエントリの一部を削除する必要がありました:<DependentUpon>タグと

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

行のみが<Compile Include="...">タグながら、削除する必要がありますする必要があります保持された。エントリ全体を削除すると、ファイルがプロジェクトリストから消えます。簡潔にするため、エントリを<Compile Include="MyTableName.cs"\>に短縮することができます。

0

プロジェクトファイルを編集する代わりに、同じ名前のEFモデルをプロジェクトに追加し、ソリューションを閉じて、他のプロジェクトからモデルファイルをコピーして、ソリューションを再度開きます。私はedmxプロパティの名前空間を変更し、モデルを再コンパイルします。

関連する問題