实体框架6中的一对多关系

Rah*_*han 5 .net c# entity-framework

我有两个简单的表必须映射到现有数据库中的列:

public class StockItem
{
    public System.Guid pkStockItemID { get; set; }

    public virtual List<StockItem_ExtendedProperties> ExtendedProperties { get; set; }
}

public class StockItem_ExtendedProperties
{
    public System.Guid pkStockItem_ExtendedPropertiesID { get; set; }

    public System.Guid fkStockItemId { get; set; }

    public virtual StockItem StockItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下是两者的配置类:

public StockItemConfiguration ()
{
    this.HasMany(item => item.ExtendedProperties)
        .WithRequired(property => property.StockItem)
        .HasForeignKey(property => property.fkStockItemId)
        .WillCascadeOnDelete();
}

public StockItem_ExtendedPropertiesConfiguration ()
{
    this.HasRequired(property => property.StockItem)
        .WithMany(item => item.ExtendedProperties)
        .HasForeignKey(property => property.fkStockItemId)
        .WillCascadeOnDelete();
}
Run Code Online (Sandbox Code Playgroud)

这导致错误:The item with identity 'StockItem_ExtendedProperties' already exists in the metadata collection. Parameter name: item.

似乎从表的两边定义关系导致错误.但是,从任一侧删除配置仍会导致相同的错误.

除了如何解决上述问题之外,我想知道原因是什么,以及应该配置这种关系中的哪两个表.谢谢.

Rah*_*han 9

原来问题是实体名称中的下划线StockItem_ExtendedProperties.删除那个摆脱了错误.使用EF 6.0.0.0,它是NuGet的最新版本.


小智 6

我也有这个问题.名为"Paquete_PartNumber"的类会引发相同的错误.删除下划线可以解决问题.

使用EF 6.0.1.