私は Entity Framework 6 Code First と Fluent API を使用しています。Visit と VisitPage の間には 1 対多の関係があります (1 つの Visit には多くの VisitPage オブジェクトがあります)。これは、POCO クラスの簡略化されたバージョンです。
訪問: Id (ID)、UrlReferrer、ページ。 VisitPage : Id (ID)、名前、Visit、VisitId
まず、Visit オブジェクトを作成し、それに VisitPage オブジェクトを追加します。次に、それらを DB に挿入します。この時点まで、すべて正常に動作します。観察: VisitPage の VisitId プロパティは、挿入後に自動的に設定されます (DB から ID 値を取得し、プロパティを設定します)。
次に、切断された環境で、訪問に新しいページを追加します (切断された環境とは、DB から Visit オブジェクトを取得しません)。この新しいページは同じ訪問オブジェクトを参照していますが、EF は Visit プロパティに基づいて設定する必要があると考えているため、VisitId プロパティを設定していません。それが問題です。EF はそれを設定せず、実際には、Visit プロパティと VisitId プロパティの値が一致しないという例外をスローします。私は、EF が内部で (たとえば DetectChanges メソッドで) これを実行できると期待していましたが、そうではありません。
例外メッセージ:
参照整合性制約違反が発生しました: 関係の一方の端にある「VisitId」のプロパティ値が、もう一方の端にある「VisitPage.VisitId」のプロパティ値と一致しません。
それで、どうすればこれを解決できますか?考えられる解決策は 2 つあります。1) 接続された環境で作業する --> EF から Visit オブジェクトを取得し、ページ オブジェクトを追加します。この場合、EF は VisitId 値を更新し、機能します。2) Visit オブジェクトを設定した後、手動で VisitId を設定します。
私は十分に明確であったことを願っています。そうでない場合は、お知らせください。