VoceRicevuta のコレクションを保持するクラス Ricevuta があります。
public partial class Ricevuta : GestPreBaseBusinessObject
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
...
[InverseProperty("Ricevuta")]
public virtual ObservableListSource<VoceRicevuta> Voci { get; set; }
}
VoceRicevuta は、さまざまなクラスへのオプションの参照を保持します。Prestazione クラスへの参照のみを考えてみましょう。
public partial class VoceRicevuta
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
public long IdRicevuta { get; set; }
....
public virtual Prestazione Prestazione { get; set; }
[ForeignKey("IdRicevuta")]
public virtual Ricevuta Ricevuta { get; set; }
}
さて、問題は次のとおりです。Prestazione のインスタンス (PreInst と呼びましょう) を作成し、データベースに保存します。その DbContext インスタンスから PreInst を切り離します。次に、PreInst を別のフォーム (別の DbContext - 私はそれを行う必要があります) に渡し、Ricevuta、VoceRicevuta (作成したばかりの Ricevuta に追加) を作成し、PreInst を VoceRicevuta Prestazione プロパティに割り当てます。また、PreInst にもいくつか変更を加えました。ここで、新しいRicevuta、新しいVoceRicevuta、そのPreInstとの関係、およびPreInstへの変更をデータベースに保存したいと思います。私は以下を実行します:
db.UpdateGraph(Ricevuta, map =>
map.OwnedCollection(ric => ric.Voci,
with => with
.OwnedEntity(voce => voce.Prestazione)
));
しかし、私はエラーが発生します:
「PRIMARY KEY 制約 'PK_dbo.Prestazioni' に違反しています。オブジェクト 'dbo.Prestazioni' に重複キーを挿入できません。重複キーの値: (12115)」
理由がわかりません!グラフの一部が既に Db に存在し、その結果として動作する場合、Graph diff の目的はチェックしていませんか?
上記のコードを実行して保存する前に、PreInst を DbContext にアタッチしようとしました。スローされるエラーは次のとおりです。
Multiplicity constraint violated. The role 'Prestazione_VoceRicevuta_Source' of the relationship 'Gestione_Prestazioni.Prestazione_VoceRicevuta' has multiplicity 1 or 0..1.
ヒントはありますか?