C# 用一对一关系更新图

C# 用一对一关系更新图,c#,entity-framework,graphdiff,C#,Entity Framework,Graphdiff,我有一个类Ricevuta,它包含一个VoceRicevuta集合: public partial class Ricevuta : GestPreBaseBusinessObject { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public long Id { get; set; } ... [InverseProperty("Ricevuta")] public virtual Ob

我有一个类Ricevuta,它包含一个VoceRicevuta集合:

public partial class Ricevuta : GestPreBaseBusinessObject
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long Id { get; set; }
    ...
    [InverseProperty("Ricevuta")]
    public virtual ObservableListSource<VoceRicevuta> Voci { get; set; }
}
好的,现在的问题是:我创建了一个Prestazione的实例,我们将其称为PreInst,并将其保存到数据库中。我将PreInst从DbContext实例中分离。 然后,我将PreInst传递给另一个表单另一个DbContext-我必须这样做,创建一个Ricevuta,一个添加到刚创建的Ricevuta的VoceRicevuta,并将PreInst分配给VoceRicevuta Prestazione属性。我还对PreInst做了一些更改。 现在我想将新的Ricevuta、新的VoceRicevuta、它与PreInst的关系以及对PreInst的更改保存到数据库中。 我运行以下命令:

db.UpdateGraph(Ricevuta, map =>
                map.OwnedCollection(ric => ric.Voci,
                        with => with
                            .OwnedEntity(voce => voce.Prestazione)
                            ));
但我得到了一个错误:

违反主键约束“PK_dbo.Prestazioni”。无法在对象“dbo.Prestazioni”中插入重复键。重复密钥的用法:12115

我不明白为什么!如果图的任何部分已经存在于数据库中并且行为一致,那么图的不同目的不是在检查吗

在运行上面的代码并保存之前,我尝试将PreInst附加到DbContext。现在抛出的错误是:

Multiplicity constraint violated. The role 'Prestazione_VoceRicevuta_Source' of the relationship 'Gestione_Prestazioni.Prestazione_VoceRicevuta' has multiplicity 1 or 0..1.

有任何提示吗?

因为您将其从图形中分离和/或使用了新的上下文,EF不知道已经存在一个上下文。设置vocerievuta.IdRicevuta,而不是将其直接附加到对象,它应该可以工作。抱歉,请查看我上次的编辑。这个问题只与PreInst有关
Multiplicity constraint violated. The role 'Prestazione_VoceRicevuta_Source' of the relationship 'Gestione_Prestazioni.Prestazione_VoceRicevuta' has multiplicity 1 or 0..1.