实体框架核心 - 在实体插入时出现负ID的错误

时间:2018-01-17 09:48:39

标签: c# entity-framework-core

当我插入一个连接实体来表示与Entity Framework Core 2.0.1的多对多关系时,它会显示以下错误:

" 实体类型的实例' ReferenciaFabricanteTieneReferenciaConstructor'无法跟踪,因为另一个具有键值的实例为“IdReferenciaConstructor:-2147482610,IdReferenciaFabricante:-2147482625'已被跟踪。附加现有实体时,请确保只附加一个具有给定键值的实体实例。"。

我之前发现ID为0(不是负数),我解决了改变类的问题。模式: Entity Framework Core - Error inserting many-to-many relation

使用正确的模式,循环引用可能有问题吗?连接表生成临时ID,引用两个实体,同时引用连接实体。

类:

[Table("ReferenciasFabricante", Schema = "public")]
public class ReferenciaFabricante
{

    [Key]
    public int Id { get; set; }

    ...

    //JOIN TABLE
    [InverseProperty("ReferenciaFabricante")]
    public IList<ReferenciaFabricanteTieneReferenciaConstructor> ReferenciaFabricanteTieneReferenciaConstructor { get; set; }

}


[Table("ReferenciasConstructor", Schema = "public")]
public class ReferenciaConstructor
{

    [Key]
    public int Id { get; set; }

    ...

    //JOIN TABLE
    [InverseProperty("ReferenciaConstructor")]
    public IList<ReferenciaFabricanteTieneReferenciaConstructor> ReferenciaFabricanteTieneReferenciaConstructor { get; set; }

}


//JOIN TABLE
[Table("ReferenciaFabricanteTieneReferenciaConstructor", Schema = "public")]
public class ReferenciaFabricanteTieneReferenciaConstructor {

    [Key]
    public int IdReferenciaFabricante { get; set; }

    [ForeignKey("IdReferenciaFabricante")]
    public ReferenciaFabricante ReferenciaFabricante { get; set; }

    [Key]
    public int IdReferenciaConstructor { get; set; }

    [ForeignKey("IdReferenciaConstructor")]
    public ReferenciaConstructor ReferenciaConstructor { get; set; }
}

型号:

protected override void OnModelCreating(ModelBuilder modelBuilder) {

    modelBuilder.Entity<ReferenciaFabricanteTieneReferenciaConstructor>().HasKey(v => new { v.IdReferenciaFabricante, v.IdReferenciaConstructor });
}

代码:

foreach (ApplicationCore.Entities.ReferenciaFabricanteTieneReferenciaConstructor referenciaFabricanteTieneReferenciaConstructor in referenciaConstructor.ReferenciaFabricanteTieneReferenciaConstructor) {

    //ERROR
    _dbContext.ReferenciaFabricanteTieneReferenciaConstructor.Add(referenciaFabricanteTieneReferenciaConstructor);
}

0 个答案:

没有答案