問題タブ [entitykey]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 2 つの EntityKeys が使用されている場合の Entity Framework 挿入エラー
以下は、私が得ているエラーのサンプルです。コード名などは読みやすくするために変更されており、私が問題を抱えている部分だけを示すために「馬鹿げた」ものになっています。
テーブル構造:
まとめ
Entity Framework 3.5 を使用して ADDRESS と共に新しい CHILD アイテムを追加しようとしていますが、プロセスで 2 つのエンティティ キー参照を使用すると重複エントリ エラーが発生します。
コードの取り組み
最初に、エンティティの作成中に親参照を使用しようとしました:
両方の外部キーを参照しようとすると、これは機能しません。ただし、どちらか一方を参照しようとすると、正常に機能します。最初のものは常に機能します。2番目のものはエラーになります。それらがどのような順序であっても問題ありません。それらを単独で使用するか、このように他の方法で使用すると、正常に機能します。
また、次のような参照だけでなく、実際のアイテムを取得しようとしました。
そして、同様のエラーを見つけた後、.Attach() メソッドで遊んでみました。
最初の方法(私の好みの方法)で行うと、最初に追加されたアイテムは問題なく動作します。2 番目のものを試すと、エラーが発生します (同じキーを持つアイテムが既に追加されています)。参照を使用するだけでなく、実際のレコードを取得してそれを実行しようとすると、SQL Server 2005 データベースから直接同じ種類のエラーが発生します。
これについて読んだ後、コンテキストとコードが親レコードの2つの異なるバージョンを参照している可能性があるという事実に関係していることは理にかなっています。しかし、私はそれを回避する良い方法を見つけることができません。
最後にやりたいことは、新しいアドレスを持つ子レコードを挿入することだけです。子レコードは親レコードを参照し、住所レコードは州レコードを参照する必要があります。できれば、参照を介してこれを実行し、SQL トランザクションを削減したいと考えています。
ありがとう!
編集
2 つの個別の entityKey オブジェクトと 2 つの個別の EntityReference<> オブジェクトを作成しようとしましたが、2 番目の EntityReference<> オブジェクトを使用して関係/参照を割り当てようとすると、次のエラーが発生します。
エンティティー参照が属するオブジェクトの関係マネージャーが既に ObjectContext にアタッチされているため、EntityReference を初期化できませんでした。
編集
Alex の回答からの関係/参照情報を必要としない回避策の使用: Entity Framework EntityKey / Foreign Key problem
コンテキストに既に含まれている情報を確認するためにチェックを行う必要があり、回避策としてそれを通過するために「偽の」レコードを作成するため、これを使用しないことをお勧めします。誰かがもっと情報を持っているなら、私は聞きたいです!
.net - 一時的な EntityKey が生成されない
データベース (SQLite) に存在しない新しい EntityObject を作成しています。オブジェクトのプロパティを設定し、それを親オブジェクトに結合します。EF が一時的な EntityKey を自動的に生成する必要があることを理解しているため、主キー プロパティを設定していません。次に、AddObject メソッドを使用して、新しく作成した EntityObject をコンテキストに追加し、その後、SaveChanges を呼び出します。
UpdateException: Abort due to constraint violation PRIMARY KEY must be unique. を受け取りました。主キー プロパティは常に 0 に設定されていますが、これはデータベースで次に使用可能な値である必要があります。データベースで主キー フィールドが自動インクリメントされていることを確認しました。
EF から一時的な EntityKey を取得するにはどうすればよいですか?
c# - SqlQuery EntityKey および対応するオブジェクトを返す
EntityKey に基づいてデータベースにクエリを実行したいのですが、これを行うためのビルド (またはより簡単な方法) はありますか?
私の現在のアプローチは、次のようになります。
(このソリューションには現在、EntitySetName が TableName ではなく、データベースとは異なる可能性がある Id の名前と同じように、MetaData から TableName を取得する必要があるという問題があります)
それともLINQでこれを行う方法さえありますか? (手動で翻訳する必要がないので、私はそれを好みます)
c# - データベースにアクセスせずに EntityKey を手動で設定する
私のアプリケーション (データベース ファースト) では、主キーは、基になるデータベースではなく、常にクライアントによって作成されます。
Entity Framework v4 では、それぞれEntity
にEntityKey
手動で設定できるプロパティがありました。
しかし、EF6ではもう見つかりませんか?
具体的な理由はありますか?
これはデータベースへの呼び出しを意味するためctx.SaveChanges()
、キーを設定するためだけに呼び出したくありません。Entity's
私もなぜObjectContext.CreateEntityKey
なくなったのだろうか?