DefiningQueryはあるがInsertFunction要素がない…err


123

このことは私を夢中にさせており、エラーは私にはまったく無意味です:

EntitySet 'TableB'は、DefiningQueryがあり、現在の操作をサポートする要素が要素に存在しないため、更新できません。

私のテーブルは次のように配置されています:

テーブルA
int idA(ID、主キー)
...

テーブルB
int idA(TableA.idAのFK)
int val

TableBには、SQLサーバーで定義された主キーがありません。Entity Frameworkはテーブルと関連付けをインポートし、両方のフィールドをキーとして設定しました。しかし、テーブルに挿入しようとすると、そのエラーが出力されます!

どうしましたか??


編集: アレックスによって提案されたように、解決策はこれでした:

  1. edmxファイルを右クリックし、[アプリケーションから開く]を選択します。XMLエディター
  2. edmx:StorageModels要素でエンティティを見つけます
  3. DefiningQueryを完全に削除します
  4. store:Schema = "dbo"の名前をSchema = "dbo"に変更します(それ以外の場合、コードは名前が無効であることを示すエラーを生成します)
  5. store:Nameプロパティを削除します

両方の列がキーの一部であることは私には問題なかったので、私はキーをそのまま残しました。


6
アップデートをありがとう-ステップバイステップの説明は、このEF newbがASP.NET MVCチュートリアルアプリを動作させるのに役立ちました!
Adam Neal

これはThnx!私は、EFが主キーを持つSQL Server 2000テーブルの適切なedmxファイルを生成しないという問題がありました。しかし、この指示は私を救いました:)
100r

4
3.5年後、この投稿はまだPPL、この場合はMEを助けています。...宛先:Palantir(詳細に説明された段階的(それは機能しました))とAlexへの感謝>>> Bravo!
nanonerd 2013

解決策は私のために働きました..おかげで
Delavega '16

その秘密は、スキーマ定義から「store:」を削除することでした。とても良い
ギルヘルムフェレイラ

回答:


141

テーブルがPrimaryKeyなしで検出されると、ビューとして扱われます。

また、ビューはStorageModel \ EntitySet [n] \ DefiningQuery要素のEDMXファイル(XMLエディターで開くと表示されます)に表示されます。

DefiningQueryがある場合、変更関数を追加しない限り、エンティティは読み取り専用になります。Insert、Update、Deleteのそれぞれに1つずつ、3つの変更関数(別名ストアドプロシージャ)が必要です。

ただし、次の2つのオプションがあります。

キー定義を変更します。

  1. そして、EFがビューであると考えるものは実際にはテーブルであることをEFに納得させる
  2. または、適切な変更関数を追加します

あなたの場合、私は(1)をお勧めします。


ジャンクションテーブルにエンティティを追加しようとしたときに、このエラーが発生しました。あなたの提案はそれを修正しました、ありがとう!
Walter Stabosz、2011

それは素晴らしい...、TNKS
モハンガンドラパリ2013

最初にデータベースから生成した.edmxファイルの「データベースからモデルを更新」をクリックすることを忘れないでください
Bashar Abu Shamaa '20年

私は同じ問題に直面していますが、奇妙な部分は、ローカル環境およびテスト環境では問題なく機能し、クライアントの環境では機能しない(鈍い)です
Mox Shah

13

テーブルに主キーを追加するだけです。それでおしまい。問題が解決しました。

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

6

テーブルに主キーがないため、このエラーメッセージが表示されました。キーをテーブルに追加した後、デザイナーを使用してedmxからテーブルをクリアし、edmxを保存してから、もう一度更新してテーブルを追加する必要があったことに気付きました。キーを取得していませんでした。すでにビューとして割り当てられているためです。これには、edmxを手動で編集する必要はありませんでした。


5

テーブルに主キーを追加し、edmxモデルからモデルを削除して、データベースから更新を選択し、ビルドして実行します。


1

@Palantir。両方のテーブルに主キーが設定されていることを確認し、テーブルに複数の主キーが設定されていることに注意してください。


0
  1. .EDMXファイルは、メモ帳、メモ帳++、または任意のテキストエディターで手動で開く必要があります。
  2. 手順1で開いたファイルのedmx:StorageModelsでエントリを見つけます。
  3. DefiningQuery要素を見つけて、このタグを完全に削除します。
  4. store:Schema = "dbo"からSchema = "dbo"を検索します(この手順をスキップすると、名前のエラーが無効になります)。
  5. ファイルを保存して閉じます。

それが問題を解決することを願っています。

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