2

次の表を検討してください。

create table master  
( nr number(10,0) identity primary key
  lastmodified date
  scn number(12,0)  -- update from sequence with every update
)
create table details
( nr number(10,0) primary key
  linenum number(3,0) primary key
  <more details>
  scn number(12,0)  -- update from sequence with every update
)

テーブルの詳細には、列 nr から列 nr への外部キーがあります。両方のテーブルは、プライマリ データベース キーをエンティティ キーとしてエンティティにマップされます。マスターとディテールの間には 1 対多の関係があります。

1 つの詳細を持つマスターを EF コンテキストに追加し、SaveChanges を呼び出すと、データベース内のトリガーによってマスターの nr フィールドが決定され、EF に返され、details.nr プロパティに書き込まれ、詳細テーブルに保存されます。よくやった、EF!

しかし、詳細エンティティの詳細フィールドの 1 つを更新して SaveChanges を呼び出しようとすると、「プロパティ 'Nr' はオブジェクトのキー情報の一部であり、変更できません」というエラーが表示されます。どうやら EF は、関連するマスターから Nr フィールドを更新しようとします。もちろん、これは変更されていません。

この制限を回避する最善の方法は何ですか? 新しいエンティティ キー フィールドを追加し、主キー列を変更することはできません。

免責事項: この問題に焦点を当てるためにコードを手作業で書きました。コンパイルできない可能性がありますが、要点を理解していただければ幸いです。

更新:問題は解決したと思います(願っています...)。詳細エンティティの SCN フィールドを ConcurrencyMode=Fixed と StoreGeneratedPattern=Computed の両方に設定すると、Nr フィールドに関するエラー メッセージが表示されます。SCN フィールドを ConcurrencyMode=Fixed および StoreGeneratedPattern=None に設定すると、SaveChanges はエラーなしで返されます。

4

0 に答える 0