【发布时间】:2020-02-03 14:09:52
【问题描述】:
我正在尝试使用 EF 核心 3 简单地为两个表播种,但它不起作用。这是一个很小的操作,但EF似乎无法做到。
对象模型
public class Object
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[ForeignKey("Building")]
public int BuildingId { get; set; }
public Building Building { get; set; }
}
建筑模型
public class Building
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual List<Object> Objects { get; set; }
}
上下文类
public class AppDatabaseContext : DbContext
{
private static readonly DbContextOptions options = new DbContextOptionsBuilder<AppDatabaseContext>().UseInMemoryDatabase("INMEM-DB").EnableSensitiveDataLogging().Options;
public AppDatabaseContext() : base(options)
{
}
public DbSet<Building> Buildings { get; set; }
public DbSet<Object> Objects { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Object>().HasOne(i => i.Building).WithMany(b => b.Objects);
modelBuilder.Entity<Building>().HasMany(b => b.Objects).WithOne(i => i.Building);*/
Building testBuilding = new Building()
{
Id = 1,
Name = "Test Building"
};
modelBuilder.Entity<Building>(b =>
{
b.HasData(testBuilding);
});
modelBuilder.Entity<Object>(o =>
{
o.HasData(new Object()
{
Id = 1,
Name = "Test Object",
Building = testBuilding,
});
});
}
}
错误信息
System.InvalidOperationException:“无法添加具有键值“Id:1”的实体类型“Object”的种子实体,因为它设置了导航“Building”。要为关系播种,您需要将相关实体种子添加到“Building”并指定外键值 {'BuildingId'}。'
为什么它不起作用?请帮我。我要扔掉这整个废话并用Java重写它(这会更快)。
【问题讨论】:
标签: c# entity-framework entity-framework-core