【发布时间】:2018-09-02 14:56:17
【问题描述】:
我正在尝试使用 EF 核心 2 代码优先方法添加迁移。问题是,具有外键关系的实体是用一个外键 id 结尾带“1”的外键和一个具有相同名称但末尾没有 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; }
}
实体店光顾
[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; }
}
在数据库中创建了访问类,其列如下图所示:
如您所见,StoreVisit 表包含“StoreId1”列(实际外键)和“StoreId”列(非外键)。
我什至配置了与 Fluent API 的关系如下:
modelBuilder.Entity<Store>()
.HasMany(c => c.StoreVisits)
.WithOne(e => e.Store)
.IsRequired();
谁能帮忙。
【问题讨论】:
-
图片中缺少某些内容。你的
StoreVisit类中有StoreId属性吗?或者这里没有显示一些流畅的配置? -
同意。 EF 不会自行创建
StoreId列,因为它是bigint而Store上的PK 只是int。即使您的实体/配置存在导致 EF 两次创建 FK 属性的问题,也将是两个int列。它是bigint的事实意味着您在某处手动添加。 -
我遇到了这个问题。这归结为我在执行流畅的 API 级联删除限制的方式上出现了故障。我使用不正确的 HasForeignKey 建立了关系,最终结果是 EF 开始创建重复字段。
标签: entity-framework-core asp.net-core-2.0 entity-framework-core-migrations