1. ホーム
  2. asp.net

[解決済み] DefiningQueryはあるが、InsertFunction要素がない... err

2022-08-21 04:30:55

質問

このエラーは私にとって無意味なものです。

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

私のテーブルはこのように置かれています。

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

テーブルB
int idA (TableA.idAに対するFK)
int val

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

何が間違っているのでしょうか?


編集します。 Alexの提案通り、解決策はこれでした。

  1. edmx ファイルを右クリックし、[Open with, XML editor] を選択します。
  2. edmx:StorageModels 要素でエンティティを探します。
  3. DefiningQueryを完全に削除します。
  4. store:Schema="dbo" を Schema="dbo" にリネームします (そうしないと、コードが名前が無効であるというエラーを発生させます)。
  5. store:Name プロパティを削除します。

キーは両方のカラムがキーの一部でOKだったので、そのままにしておきました。

どのように解決するのですか?

プライマリキーがないテーブルがあった場合、それはビューとして扱われます。

そして、ビューはEDMXファイル(XMLエディタで開いて確認)のStorageModelEntitySet[n] \DefiningQuery要素で表示されます。

DefiningQueryがあるとEntityはmodification関数を追加しないとreadonlyになります。修正関数(ストアドプロシージャ)は、Insert、Update、Deleteの3つずつ必要です。

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

キー定義を変更する。

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

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