アプリケーションでEFを使用しています。
新しいレコードをマッピングテーブルに保存\挿入しようとしています
そして、次のエラーを取得します。
Unable to update the EntitySet 'UsersLimitationToCountry' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
Edmxで自分で定義する必要がありますか?どうやって?
多対多のマッピングテーブルにPKがありませんでした
追加され、問題は解決されました。
受け入れられた答えに同意しました。その背後にある理由を提供するだけです...
プライマリキーを持たないテーブルでEFマッピングが行われた場合、ビューは論理エンティティであると見なされ、更新できません。
そのため、不足している主キーをurテーブルに追加するか、それらを表示と見なし、更新操作を実行しないでください。
ビューが更新可能な場合、.edmxのStorageModelセクション内のビューのEntitySet定義から要素を削除するだけで、通常の更新処理は他のテーブルと同様に機能します。
これは私の場合です。単に削除すると、別のエラーが発生しました。最後の投稿を除き、この投稿の手順に従いました。あなたの便宜のために、私は次のように問題を解決するために私が従った投稿から4つのステップをコピーしました:
DefiningQuery
を完全に削除します更新可能なビューでこの問題に遭遇しました。見つかった この記事 私の問題を解決しました。
したがって、ビューの基礎となるテーブルには主キーが定義されていますが、EFはエンティティがビュー上に構築されたため、どの列がPKにあるかを知りません。ここでのコツは、ビューをテーブルとして更新できることをEFに「納得させる」ことです。手順は上記の回答で述べたものとほぼ同じです。
<DefiningQuery>
セクションを完全に削除しますstore:Type="Views"
をstore:Type="Tables"
に変更しますEdmxファイルを右クリックし、[開く]、[XMLエディター]を選択します。
Edmx:StorageModels要素でエンティティを見つけます
DefineingQueryを完全に削除する
store:Schema="dbo"
の名前をSchema="dbo"
に変更します(そうしないと、コードは名前が無効であるというエラーを生成します)
私のテーブルには、SQLテーブルの設計で主キーがありませんでした。追加して解決しました。
**テーブルにPKがないことを再確認してください:**主キーを追加してから、edmxにテーブルを削除して再追加するだけで動作します
外部キーテーブルに、参照テーブルの列と一致する列名が複数ないことを確認してください。参照表と参照表の間で主キーのみが一致する必要があります。 0..1には識別列名が必要です。参照および参照先のテーブルに複数の一致する列名がないことを保証する列の命名規則を作成してください。 ALMwConsult.net提供
テーブルで主キーを処理していない場合、レコードデータベースの更新および挿入中にMVCでこの問題が必ず発生します。
DbUpdate例外はユーザーによって処理されませんでした
Db first mvcアプリケーションでの作業。問題は、テーブルの主キーを定義するのを忘れていたことです。 alterコマンドを使用して主キーを追加し、DAL(edmx)を更新することで解決しました