1

我有一个类 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; }
}

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)并将其保存到数据库中。我将 PreInst 从该 DbContext 实例中分离出来。然后,我将 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)
                            ));

但我得到错误:

“违反主键约束‘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.

有什么提示吗?

4

0 回答 0