web-dev-qa-db-ja.com

DefineQueryがありますが、InsertFunction要素はありません... err

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

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

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

 TableA 
 int idA(ID、主キー)
 ... 
 
 TableB 
 int idA(TableAのFK。 idA)
 int val 

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

どうしましたか??


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

  1. Edmxファイルを右クリックして、[開く]、[XMLエディター]を選択します。
  2. Edmx:StorageModels要素でエンティティを見つけます
  3. DefineingQueryを完全に削除する
  4. Store:Schema = "dbo"の名前をSchema = "dbo"に変更します(そうでない場合、コードは名前が無効であるというエラーを生成します)
  5. Store:Nameプロパティを削除します

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

123
Palantir

まあ、PrimaryKeyなしでテーブルに遭遇すると、それはビューとして扱われます。

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

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

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

キーの定義を変更します。

  1. そして、EFがビューは実際にはテーブルであると考えていることを確信させる
  2. または、適切な修正関数を追加します

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

141
Alex James

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

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

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

6
mlapaglia

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

5
user4584103

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