Visual Studio 2012 で問題が発生し、スキャフォールディングで MVC4 コントローラーを追加しようとしています。理想的には、新しい項目の追加 - ADO.NET Entity Data Model (つまり、Code First ではない) を使用して、データベースから Entity Framework モデル (edmx ファイルなど) を Web アプリケーションとは別のアセンブリに生成したいと考えています。ただし、これを設定して Add Controller を使用し、「Entity Framework を使用して読み取り/書き込みアクションとビューを備えた MVC コントローラー」を指定し、DatabaseModel アセンブリからモデル クラスとデータ コンテキスト クラスを選択すると、次の警告メッセージが表示されます。
「Ifl.Payforit4.DatabaseModel.Mno」は指定された「Ifl.Payforit4.DatabaseModel.Payforit4Entities」クラスの一部ではなく、「Ifl.Payforit4.DatabaseModel.Payforit4Entities」クラスを変更して「DbSet」プロパティを追加できませんでしたそれ。(たとえば、「Ifl.Payforit4.DatabaseModel.Payforit4Entities」クラスは、コンパイル済みアセンブリにある場合があります。)
同じソリューション内にあり、T4 を介して自動生成されますが、Payforit4Entities の自動生成コードを見ると、別のアセンブリにあるため、クラスを変更できないことは理にかなっています。
public DbSet<Mno> Mnoes { get; set; }
私は他の多くのことを試しました。
- データモデルを Web アプリケーションに直接配置する
- Mno クラスに問題がある場合に備えて、モデル クラスをデータベース内のさまざまな他のテーブルに変更する
- データ モデルを 1 つの単純なテーブルに減らす
- Entity Framework Power Tools Beta 2 を使用して Code First モデルをリバース エンジニアリングします。これにより、新しい一連のエラーが生成されました。ベータ版である理由がわかりました。
- ADO.NET Data Model Code Generation Strategy を None から Default に変更して、DbContext ではなく ObjectContext に基づいてデータ モデルを作成する
- プロパティ名が Mnoes ではなく Mno になるように複数形をオフにする
それらのどれも機能しませんでした。うまくいった唯一のことは、Code First DbContext 派生クラスと POCO を手動で作成することでした。偶然にも、MVC4 スキャフォールディングがこの種のデータ モデルを使用していることを示す、私が見つけたすべての例が見つかりました。Code First が MVC4 スキャフォールディングで動作する唯一の種類のデータ モデルであるとどこかに書いてありますか? Visual Studio 2012 でデータベース ファースト (.edmx) データ モデルをスキャフォールディングできた人はいますか? データベースは非常に複雑なので、データベース ファースト戦略に固執したいと思います。
Code First モデルと Database First モデルの足場には、いくつかの違いが必要であることがわかります。たとえば、前者には KeyAttribute で示されるキーを保持する POCO プロパティがありますが、後者にはその情報が edmx モデル ファイルに保持されます。これが Entity Framework Power Tools のリバース エンジニア機能の根拠ですか? MVC4 スキャフォールディングを使用するために、edmx ファイルからリバース エンジニアリングされた Code First モデルに移行する予定はありますか? もしそうなら、Entity Framework Power Tools が完成するまで、動的データ プロジェクトを使用し続けることが期待されますか?