如何播种新的接合表
本文关键字:接合 何播种 | 更新日期: 2023-09-27 18:21:54
我在实体框架中首先使用代码。我的数据库中有两个表——Clients和Products。里面有一些数据。我添加了一个新的连接表,它对这两个表都有外键。我该如何在那张桌子上播种?当我添加新的客户端或产品时,实体框架是否会添加新行,因为它似乎没有。:
public class UserPriceList
{
public UserPriceList()
{
PriceFactor = 1M;
}
[Key]
public int UserPriceListId { get; set; }
[Index("IX_UserPrice", 1)]
public int ProductId { get; set; }
public virtual Product Product { get; set; }
[Index("IX_UserPrice", 2)]
public int ClientId { get; set; }
public virtual Client Client { get; set; }
public decimal PriceFactor { get; set; }
}
您的UserPriceList看起来很像一个连接表,但EntityFramework并不是这样查看它的,因为您将它定义为一个具有附加属性的实体。通过将ICollection添加到客户端并将IColletion添加到产品,会在后台自动创建一个连接表,作为一个具有ProductId和ClientId的表。没有定义的模型,你可以通过Client.Products.Add(someProduct)与它交互,它会在后台填充连接表。
为了让你的UserPriceList作为一个连接表工作,你可以在你的OnModelCreating 中尝试这样的东西
modelBuilder.Entity<Product>()
.HasMany(x => x.Clients)
.WithMany(x => x.Products)
.Map(x =>
{
x.ToTable("UserPriceList"); // third table is named Cookbooks
x.MapLeftKey("ProductId");
x.MapRightKey("ClientId");
});
以显式地将UserPriceList映射为连接表。您可能会遇到不可为null的小数(或者可能不会,因为您在构造函数中设置了一个值)以及将UserPriceList定义为实体的问题。
您还可以将UserProductList作为一个实体进行交互,并显式地向其中添加项目
可能最安全的(最有可能工作的)方法是删除ICollection<产品>来自客户端和ICollection<客户端>从产品添加ICollection<用户价目表>两者都有。