2011-06-20 4 views
4

手順...MVC3 - エンティティフレームワークと私は通過

  • DBから生成>新しいADO.NETエンティティデータモデルを追加>のAdventureWorks DBへのセットアップ新しい接続文字列をコントローラを設定するエラー>次へ>テーブル「DatabaseLog」>「完了」を選択します。 DatabaseLogがedmxビューに表示されていることを確認します。

  • 右クリックコントローラは>エンティティ

  • Modelクラスに
    AdventureWorksDWEntities

  • コンテキスト
    新しいデータコンテキストを使用して、読み取り/書き込みアクションとビューとコントローラ

  • テンプレート
    コントローラを追加します>デフォルト名を受け入れる

  • 表示
    剃刀

  • [追加]をクリックします。

プロデュースエラー:。
「 'DatabaseDocumentor.models.AdventureWorksDWEntities' のメタデータを取得できません

  • System.Data.Edm.EdmEntityeType:EntityType 'AdventureWorksDWEntities' には、キーを持っていません

  • System.Data.Edm.EdmEntitySet:EntityType:EntitySet 'AdventureWorksDWEntities'は、このエンティティタイプのキーを定義します。キーが定義されていないタイプの 'AdventureWorksDWEntities'です。


Iでは、AdventureWorks(ないAdventureWorksDW)、それが働いていたこの時間を使用して再度試してみました。しかし、私はまだコントローラを生成するときに何を選ぶべきか理解していません。私は3つのオプションを持っています:

テンプレート
ここでは、エンティティを使用して読み書きアクションとビューを持つコントローラを選びました。これは理解するのが簡単です。私はこのオプションを選ぶので私のために私のテーブルを生成したいです。

モデル
これは私がモデルにしたいものです。この場合、 "Department"テーブルをモデル化したいと思います。だから部署を選ぶ。

文脈
これは私にとって本当に曖昧です。 * 名前 *エンティティを選択しました。これはweb.config接続文字列領域の値です。コンテキストとして接続文字列を選択する必要があるのはなぜですか?私はC#で "私のエンティティに到達するために使うオブジェクト"としてのコンテキストしか知りません。それで、ここで私は視覚化するのが難しいです。コンテキストの接続文字列を常に選択する必要がありますか?

+0

重複するhttp://stackoverflow.com/questions/5277788/how-to-fix-system-data-edm-edmentitytype-has-no-key – Eranga

+0

@Eranga - その答え私の問題は修正されず、更新された質問にも対処しません。私はキーがいくつかのORMのテーブルに必要であることを知っています。それは亜音速でも同じです。それは私の質問ではありません。ダブじゃない。 –

+0

PKを指定しましたか? PKを与えないと、EFやnHibernateはどのようにしてエンティティを一意に識別できますか?それはあなたの2番目の質問への答えを与えてくれません。 – Eranga

答えて

3

この問題は、コンテキストがドロップダウンから正しく選択されていない場合に発生する可能性があります。コンテキストは、Webに格納された値でなければなりません。config

<add name="NamedEntitiesCs1" 

生成するモデルも含まれています。

+0

このポストをありがとう。この問題については、多くの時間を無駄にしてしまいました... – Banzor

2

私は1つの溶液中で以下のプロジェクトのそれぞれに使用しています3階層のarchitiectureを持っている...問題が何であるか

を見つけました。

1.YeagerTech 2.YeagerTechWcfService 3.YeagerTechModel

私のWCFサービスは私のモデル、(1)が作成するメタデータを認識するのに十分な「スマート」ではありませんスタートアッププロジェクトを参照するにもかかわらず、何があって、コントローラーこの場合、edmxモデルを含むプロジェクトへの参照を含める必要があります。

また、メタデータの接続を取得するために、接続文字列がweb.configファイルを介してスタートアッププロジェクト(1)にも存在することを確認する必要があります。

+0

アプリケーションが実行されているコンテキストに基づいて接続文字列が自動検出されます。コンテキストがWebサイトであるため、接続文字列をWebで定義する必要があります。 Config。接続文字列を自動検出する必要はありませんが、何かカスタムを行う場合は、 "何かカスタム"を行う必要があります。 ;-) – kingdango

1

私は答えを見つけました。モデルクラスには、IDプロパティであるキーが必要です。つまり、 public int ID {get; set;} 変更を保存し、ソリューションをビルドまたは再構築します。 それはうまくいくはずです。

0

IDのモデル内のプロパティは、公開として宣言する必要があります。再構築してもう一度やり直してください。

関連する問題