21

VS 2010 および EF 4.4 では、Entity Framework で DBContext ジェネレーターを使用すると、POCO オブジェクトが DBContext ファイルとは異なるプロジェクトにあるように、.tt ファイルを移動および編集できました。

私が話していることの例については、ここここを参照してください。

VS2012 / EF5 では、これは不可能のようです。POCO クラスは、EDMX ファイルの下のサブアイテムとして生成されます。ファイルを Visual Studio 内からコピーすることはできません。移動したファイルはコンパイル時に再作成されるため、エクスプローラーからファイルを移動しても役に立ちません。

ここで基本的なものが欠けていますか?

私は EF5 でコード生成項目を使用していません (私は EF4.x を使用していました)。それが違いでしょうか?

4

3 に答える 3

64

Visual Studio 2012では、ADO.NETエンティティデータモデル(* .edmx)を追加すると、EDMXファイルのサブアイテムとしてコンテキストクラスとモデルクラスのT4テンプレートが含まれます。たとえば、MyModel.edmxを追加すると、次の4つのサブアイテムが含まれます。

  1. MyModel.Context.tt
  2. MyModel.Designer.cs(C#プロジェクト内)
  3. MyModel.edmx.diagram
  4. MyModel.tt

MyModel.ttは、POCOエンティティをサブアイテムとして生成します。別のプロジェクトでエンティティを生成するには、次の手順に従います。

  1. 別のクラスプロジェクトを作成します。
  2. 新しいアイテムを追加し、「EF5.xDbContextGenerator」テンプレートを選択します。これにより、*。ttファイルが作成されます。たとえば、MyModel.ttです。
  3. テンプレートファイルを次のように編集します。

    const string inputFile = @"MyModel.edmx"; // old value (remove)
    const string inputFile = @"..\MyOtherProjectName\MyModel.edmx"; // new value
    
  4. 他のプロジェクトでは、EDMXファイルを展開し、MyModel.ttを右クリックして、[削除]を選択します。

それでおしまい。完了です。これで、1つのプロジェクトにモデルとコンテキストがあり、別のプロジェクトにエンティティがあります。

于 2012-10-24T20:08:17.300 に答える
6

次の投稿を確認してください: Visual Studio 2012 - EF .tt ファイルを移動できません

関連する .csproj ファイル内の .tt ファイルの依存関係情報を .edmx ファイルに削除する方法について説明します。これにより、ソリューション エクスプローラー内から .​​tt ファイルをドラッグできるようになります。

前の回答で説明し、以下に示すように、.tt ファイルの先頭にあるファイル パスを更新して、.edmx を指すようにしてください。

const string inputFile = @"..\EFTest\EFTestModel.edmx";

実際にはいくつかの要素と手順があり、1 つでも欠けていると、POCO クラスの分離が正しく機能しなくなる可能性があります。以下に表示できるプロセス全体を詳しく説明するブログ投稿を作成しました。

VS.NET 2012 の T4 テンプレートから生成された Entity Framework POCO クラスの分離:
http://allen-conway-dotnet.blogspot.com/2013/01/separating-entity-framework-poco.html

于 2013-01-04T19:22:55.610 に答える
2

そのため、今すぐ Windows エクスプローラーから移動する必要があります。次に、移動した .tt ファイル内の EDMX ファイルへのパスを編集します。あなたがそれをしたら、それは動作します。(上記ではないと言っていますが、最初に試したときに何か間違ったことをしたに違いありません。)

于 2012-09-11T18:04:43.640 に答える