[英]How to seed entity framework core data with related data
我有这两个类:
public class Item
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public Store Location { get; set; }
}
public class Store
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
我想在我的 ASP.NET Core Entity Framework Core WebAPI Code First 应用程序中植入一些示例数据。
所以我看到我可以使用类似的东西:
modelBuilder.Entity<Item>().HasData(new Item {<properties>});
两个问题:
new Store{<etc.>}
这样为 Location 提供一个值,我会收到一个错误,即没有为LocationID
提供任何值,这是我的数据库中表“Items”中的列,它是将该表与表“链接”的外键商店”。当 class 没有“LocationID”属性时,如何在我的数据库中播种新的“项目”? 在添加“项目”之前,我必须先专门添加一个“商店”吗? 我希望会有某种自动级联插入。
关于您的问题:
因此,您还需要像播种项目一样播种您的商店:
modelBuilder.Entity<Store>().HasData(new Store {<properties>});
我还会做的是像这样改变你的模型:
public class Item
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int StoreId { get; set; } //or LocationId if you prefer
[Required]
public Store Location { get; set; }
}
public class Store
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
并且您需要将此设置为您的位置 object 的外键:
modelBuilder.Entity<Item>().HasOne(e => e.Location)
.WithMany(e => e.Items)
.HasForeignKey(e => e.StoreId)
.OnDelete(DeleteBehavior.Restrict);
之后,您可以将种子方法调整为:
modelBuilder.Entity<Item>().HasData(new Item { Id = 1, StoreId = 1 });
请注意,无需实例化位置 object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.