3

次の方法で、既存のデータベースから 19 個のコード ファースト クラスを生成しました。

  • Model-First Entity を作成し、「Generate from database」を選択する
  • 右クリックして「コード生成項目の追加」を選択
  • EF 4.x DbContext ジェネレーター

必要なすべてのクラスが生成され、非常に満足しています...

そして今、私の質問のために

  • 生成されたすべての .cs ファイルが封印された .tt コレクションにネストされているのはなぜですか?
  • それらを好きなフォルダにコピーして貼り付けて、通常のクラスのように扱うことができないのはなぜですか?
  • それは私だけですか、それとも移行「update-database」をそのようにすると使用できませんか?

私の全体的な質問は、なぜそれらが .tt フォルダーにあるのですか? そして、今データベースをどのように更新すればよいでしょうか? データベースを手動で編集してモデルを更新し、dbContext を再度生成しますか? または、.tt フォルダーから .cs ファイルを取得するトリックはありますか?

DbContext を生成した後、データベースをどのように変更しますか?

4

1 に答える 1

5
  • 生成されたすべての .cs ファイルが封印された .tt コレクションにネストされているのはなぜですか?

コード ファースト クラスはコード ファースト クラスではありません。これらは、データベース スキーマに基づいて生成されました。したがって、これはデータベースファーストのアプローチです。データベースを最初に使用すると、データベースに基づいてエンティティ クラスが生成されます。つまり、データベースが最初で、コードは2 番目です。.tt ファイルは、データベースに基づいてクラスを生成する方法を決定する T4 テンプレートです。データベースを変更してから、エンティティ クラスを再生成できます。

  • それらを好きなフォルダにコピーして貼り付けて、通常のクラスのように扱うことができないのはなぜですか?

これらは T4 テンプレートに基づいて生成されたファイルであるためです。

  • それは私だけですか、それとも移行「update-database」をそのようにすると使用できませんか?

あなたの質問のこの部分については、はっきりと答えることができず、延期する必要があります。ただし、アプローチを組み合わせて一致させたいようです。データベースに基づいてコード クラスを生成することから始めて、それ以降、モデル プロジェクトに追加する新しいエンティティ クラスに基づいてデータベースを変更する必要があるようです。そうですか?

エンティティ POCO がどのように見えるべきかがわかったので、コード生成の部分を忘れて、純粋なコード ファーストのアプローチを使用することができます。以前 (EF 4.1 より前) にこの T4 コード生成を試みましたが、すぐに放棄しました。ご覧のとおり、エンティティ クラスと DbContext クラスが生成されるため、オブジェクト指向モデルを制御できなくなるからです。

于 2012-07-05T03:51:29.163 に答える