使用外键关系创建的 EF Core 2 重复列

Ahm*_*aba 8 entity-framework-core asp.net-core-2.0 entity-framework-core-migrations

我正在尝试使用 EF 核心 2 代码优先方法添加迁移。问题是,具有外键关系的实体是使用末尾带有“1”后缀的外键 id 和具有相同名称但末尾没有 1 的冗余列创建的,这不是外键。

示例是我的 2 个类,Store 和 StoreVisit,如下所示:

店铺

[Table("Store")]
public class Store
{
    public Store()
    {
        StoreVisits = new HashSet<StoreVisit>();
    }
    [Key]
    public int StoreId { get; set; }

    [StringLength(30)] 
    public string ShopName { get; set; }

    [StringLength(50)]
    public string ShopKeeper { get; set; } 

    public string ContactNo { get; set; }

    [StringLength(70)]
    public string Address { get; set; }

    [StringLength(20)]
    public string Street { get; set; }

    [StringLength(50)] 
    public string City { get; set; }

    public IEnumerable<StoreVisit> StoreVisits { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

店铺参观

[Table("StoreVisit")]
public class StoreVisit
{

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

    [StringLength(50)]
    public string Location { get; set; }

    [StringLength(50)]
    public string Notes { get; set; }

    [DataType(DataType.Time)]
    public DateTime StartTime { get; set; }

    [DataType(DataType.Time)]
    public DateTime EndTime { get; set; }

    public Store Store { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

Visit 类是在数据库中创建的,列如下图所示:

在此处输入图片说明

如您所见,StoreVisit 表具有列“StoreId1”(实际外键)和“StoreId”(非外键)列。

我什至配置了与 Fluent API 的关系如下:

            modelBuilder.Entity<Store>()
            .HasMany(c => c.StoreVisits)
            .WithOne(e => e.Store)
            .IsRequired();
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗。

小智 1

需要在类上定义外键。

[Table("StoreVisit")]
public class StoreVisit
{

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

    public int StoreId { get; set; }

    [StringLength(50)]
    public string Location { get; set; }

    [StringLength(50)]
    public string Notes { get; set; }

    [DataType(DataType.Time)]
    public DateTime StartTime { get; set; }

    [DataType(DataType.Time)]
    public DateTime EndTime { get; set; }

    public Store Store { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

将外键引用添加到 Fluent API 也会造成伤害。

modelBuilder.Entity<Store>()
            .HasMany(c => c.StoreVisits)
            .WithOne(e => e.Store)
            .HasForeignKey(e => e.StoreId)
            .IsRequired();
Run Code Online (Sandbox Code Playgroud)