我正在开发一个 Entity Framework Core 项目,我不确定如何使用影子属性作为外键以及如何在这种情况下播种数据。
我有两个类,品牌和模型,具有一对多关系,其中品牌可以有多个模型。我将实体定义如下:
public class Brand
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public List<Model> Models { get; set; } = new List<Model>();
}
public class Model
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
}
要使用影子属性建立外键关系,我已按如下方式配置模型构建器:
modelBuilder.Entity<Model>()
.HasOne<Brand>()
.WithMany(b => b.Models)
.HasForeignKey("BrandId")
.IsRequired();
手动添加实时数据时,一切正常。例如:
static async Task Main(string[] args)
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
AppDbContext dbContext = new AppDbContext();
var brand = new Brand()
{
Name = "BMW",
Models = new List<Model>()
{
new Model()
{
Name = "3 series"
}
}
};
dbContext.Brands.Add(brand);
dbContext.SaveChanges();
}
但是,当我尝试使用 HasData 方法播种数据时,我遇到了问题。这是我如何尝试播种数据的示例:
var brands = new Brand()
{
Name = "Mercedes",
Models = new List<Model>()
{
new Model()
{
Name = "E class"
}
}
};
modelBuilder.Entity<Brand>().HasData(brands);
在这种情况下,播种不会按预期进行。我的问题是,在 Entity Framework Core 中播种数据时,我们可以使用影子属性作为外键吗?如果是这样,我怎样才能实现这一目标?
感谢您的帮助和指导。
我也遇到了同样的问题。
以这种方式种子模型数据
modelBuilder.Entity<Model>().HasData(
new
{
Id = 1,
Name = "YourModelName",
BrandId = 1
},
new
{
Id = 2,
Name = "OtherModelName",
BrandId = 1
},
...);