ADO.NET Entity Framework:更新ウィザードはテーブルを追加しません


93

私は新しいADO.Netエンティティデータモデルを追加し、私のプロジェクトに、使用の更新ウィザードをモデルにテーブルを追加します。選択した5つのテーブルがデザイン画面に追加されました。他の2つのテーブルは追加されません。ウィザードでそれらを選択して[完了]をクリックしますが、デザイン画面には表示されません。

これはバグですか、それともテーブルを(設計上)モデルに追加できない状況がありますか?


更新:XML(* .edmx)は問題を明らかにします。

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
これにより、WAYの投票が増えるはずです。エラーが実際に発生するのは.edmxファイルだけなので、Visual Studioがテーブルを追加できないとは思いませんでした。うまくいけば、彼らはv2でダイアログボックスを持っているでしょう!
ジョンブブリスキー

+1-私の場合、エラーメッセージはありませんでした。
teynon 2013

ご指摘のとおり、インポートされないテーブルには主キーがありませんでした。PKを追加すれば準備完了です。
エリック

回答:


46

デザイン画面はエンティティモデルとは異なります。EDMXのマッピングにテーブルがあり、デザインサーフェイスには表示されない場合があります。XMLとしてファイルを表示して、これが当てはまるかどうかを確認します。この場合、テーブルは既にエンティティモデルの一部であるため、更新ウィザードではテーブルを再度追加できません。したがって、一般的に言えば、更新ウィザードは、それ自体がデザインサーフェイスよりもエンティティモデルについて認識しています。

私はそれがまさにあなたがいる状況だとは思いませんが、それはあなたに解決策の一般的な考えを与えるはずです:XMLに行き、問題のテーブルへの参照を探してください。


4
この問題が発生しました。モデルからテーブルを削除しましたが、再度追加しようとすると、ビジュアルデザイナがデータベース内にあると表示しませんでした。それを回避するために、.edmxファイルからテキストを削除しましたが、XMLを台無しにしてしまいました。これを行う場合は、念のため、最初にファイルをバックアップしてください。幸いなことに、私はgit diffでめちゃくちゃなタグを見つけることができました。
GrandMasterFlush 2012

41

主キーをすべてのテーブルに設定するか、各テーブルの任意の列に1つのチェックされていないチェックボックス[Allow null]を設定します。わたしにはできる :)


2
これは正しい答えだと思います。少なくとも私にとってはそうでした。ありがとう!
Eric

@Parvinder、私は自分のプロジェクトのほとんどでこの問題に苦労しています。結局、あなたの答えはそれを私にすべて明らかにしました。私の場合、Joining tableでは、Not null keyフィールドまたは主キーだけを指定していません。これを修正した後、私は安心しました。
どうも

解決策で理解したのは、i)テーブルに主キーがない場合、または(ii)そのテーブルにnullを許可する列がない場合、エンティティモデルにテーブルを追加できないことです。
Murtuza Khan、2018

10

1.テーブル構造を変更し、プライマリ列を追加します。モデルを更新します。

2. XMLエディターで.EDMXファイルを変更し、この特定のテーブルのタグの下に新しい列を追加してみます。(動作しないでしょう)

3.既存の列に新しいプライマリ列を作成する代わりに、既存のすべての列を使用して複合キーを作成します。(WORKED)

エンティティフレームワーク:エンティティモデルへの主キーのないDataTableの追加。


私はこれと同じ問題に遭遇しました。エンティティモデルはテーブルを追加していましたが、デザイナーには表示されませんでした。コードでアクセスすることもできませんでした。IDフィールドKeyを追加しました...機能しました!
Ravi Ram

6

私にもこの問題があり、上記のすべてがうまくいきませんでした。私に役立ったのは次のことでした。

データベースに接続しようとすると、そのデータベースは、異なる資格情報を持つ異なるユーザーを受け入れることができます。ユーザーAがDまでいるとします。

ユーザーと接続する場合は、ユーザーが正しい資格情報を有効にしていることを確認してください。この場合は、読み取りと書き込みのオプションが有効になっています。

これを行うには、SQLサーバーに接続されているMS SQL Server Managment Studioを起動し、Visual Studioで接続しようとしているデータベースを選択します。'your_dbname'-> Security-> Usersの下に、ユーザーのリストがあります。ログインに使用するユーザー名を右クリックし、プロパティを選択します。ウィンドウが開きます。[全般](デフォルトで選択されている)ページを選択し、[データベースロールメンバーシップ]タブで[ db_datareader]と[db_datawrite]が選択されていることを確認します。

注:MS SQL Server Managment Studioにもログインする場合は、これらのオプションを有効/無効にできるユーザーでログインしてください...


5

特定のテーブルで「Null」を確認します。すべての列が「Nullを許可」に設定されている場合、Entity Frameworkはそれを「Null」テーブルと見なします。同じ問題が発生し、「Nullを許可する」のチェックを外すと、必要なテーブルが追加されました。


1
それは動作し、愚かなエラーや警告がログに表示されません!
RolandoCC 2018


1

これに対する私の解決策は、モデル全体を削除し、必要な新しいテーブルを含めてモデルを読み取ることです。

デザイナで誤ってテーブルを一度削除してしまい、読み取れませんでした。したがって、モデル全体を削除して再読み込みします。

これにもいくつか問題がありました(Ado.Net Entity Data Modelが正しく更新されていません


1

これは最新バージョンで解決されています(環境:VS 2012、.net framework 4.5)。単純に.edmxファイルを開き、必要なテーブル/ストアドプロシージャ/ビューを追加します。主キーを持たないテーブル/ビューは、読み取り専用のテーブル/ビューとして作成されます。

テーブル/ビュー 'TABLE_NAME'には主キーが定義されていません。キーが推定され、定義は読み取り専用のテーブル/ビューとして作成されました。


1
EF 5.0のいくつかのケースでエラーが残っとにかくイベント
グレッグ・Z.

0

モデル全体を削除する必要はありません(数百のテーブルになる可能性があります!)。

ウィザードは「新しい項目の追加」を処理できますが、複合キーの変更や列の名前の変更などのいくつかの変更-何をすべきかわからないため、試行しません-同期が取れなくなります。

SO:問題のテーブルをモデル(概念モード)から削除し、Model.Storeから削除してから、ウィザードを使用してモデルを更新し、問題のテーブルのみを再度追加します。


0

これまでにこれを行う必要がなかった人のために、もう少し詳細を捨てるだけです。アップデート4がインストールされたVisual Studio 2013を使用しています。テーブルにいくつかのフィールドを追加し、モデルからテーブルを削除してから更新しましたが、どのテーブルもチェックできませんでした。

主キーがあります。

新しいテストテーブルを作成しましたが、表示されたのでチェックできましたが、元のテーブルはチェックできませんでした。

これまでXMLで開いたことがなく、その方法もわかりませんでした。.edmxファイルを右クリックし、「アプリケーションから開く」-xmlエディターを選択します。

問題のテーブルはそこにありました、それは新しいフィールド(奇妙な)さえ持っていました。

私はそれへのすべての参照を削除しました(数回)-1つを削除して保存した後、それを開こうとして表示されない場合は、先に進んで「XMLの表示」を選択してください-エラーを見て、基本的にあなたがそれをきれいにするまで、バウンドするボールに従ってください。

余分な詳細が誰かを助けることを願っています。

ジョー


0

私が見つけた簡単な方法の1つは、(SQL Server Management Studioで)タイプINTのID列を追加し、[Nullを許可]の選択を解除し、(IDの)列のプロパティ>> ID仕様>>チェック(Is Identity)を作成して、増分が設定されていることを確認してください。

上記が完了したら、.edmxウィンドウに戻り、右クリックして、データベースからモデルを更新します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.