11

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; }

私は他の多くのことを試しました。

  1. データモデルを Web アプリケーションに直接配置する
  2. Mno クラスに問題がある場合に備えて、モデル クラスをデータベース内のさまざまな他のテーブルに変更する
  3. データ モデルを 1 つの単純なテーブルに減らす
  4. Entity Framework Power Tools Beta 2 を使用して Code First モデルをリバース エンジニアリングします。これにより、新しい一連のエラーが生成されました。ベータ版である理由がわかりました。
  5. ADO.NET Data Model Code Generation Strategy を None から Default に変更して、DbContext ではなく ObjectContext に基づいてデータ モデルを作成する
  6. プロパティ名が 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 が完成するまで、動的データ プロジェクトを使用し続けることが期待されますか?

4

4 に答える 4

13

秘訣は、最初にソリューションをコンパイルしてから、コンテキスト クラスを手動で入力することです。ドロップダウン リストから選択しないでください。自分でクラス名を入力するだけで、魔法のように機能します ;-)

ここを参照してください: ASP.NET MVC4 – MVC コントローラーで Database First EF を使用する方法

于 2013-03-20T19:50:35.177 に答える
0

EntityFramework5を使用してedmxファイルからスキャフォールディングできるとは思いません。

私は同様のことを試しましたが、まだエラーが発生しています。

悪いedmxを削除してやり直すだけで、正しい.ttファイルが生成され、スキャフォールディングが正しく機能するようになる可能性があるという提案がいくつかありますが、これはまだ見ていません。

私はDBファーストのアプローチを好むので、それを機能させるためにもう少し試してみるつもりです。さらに詳しい情報があれば、この回答を更新します。

于 2012-12-14T14:45:22.530 に答える
0

Entity Frameork 5/VS 2012 の edmx コード ジェネレーターにはバグがあります。コンパイラ エラーでいっぱいのコードが作成されます。vs2012 がリリースされたとき、出荷の準備ができていなかったと推測しています。これが、デフォルトのコード生成フラグを none に設定した理由です。

Microsoft に対する唯一の質問は、これを修正する更新プログラムがいつ提供されるかということです。

于 2013-01-05T06:33:15.513 に答える
-2

それは真実です!秘訣は、最初にソリューションをコンパイルしてから、コンテキスト クラスを手動で入力することです。ドロップダウン リストから選択しないでください。自分でクラス名を入力するだけで、魔法のように機能します ;-)

感謝!!マーカス!

于 2014-07-22T00:11:18.727 に答える