我在Entity框架中首先使用Code。我的数据库中有两个表 - 客户端和产品。其中有一些数据。我添加了一个新的联结表,它有两个外键。我应该怎样播种那张桌子?当我添加新客户端或产品时,实体框架会添加新行,因为它似乎没有。:
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; }
}
答案 0 :(得分:0)
您的UserPriceList看起来很像联结表,但EntityFramework不会以这种方式查看它,因为您将其定义为具有其他属性的实体。通过向客户端添加ICollection和向产品添加ICollection,可以在幕后自动创建联结表,作为具有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显式映射为联结表。您可能遇到非可空小数的问题(或者可能不是因为您在构造函数中设置了一个值)并且将UserPriceList定义为实体。
您也可以作为实体与UserProductList进行交互,并明确地向其添加项目。
可能最安全(最有可能工作)的方法是删除ICollection&lt; Product&gt;来自客户和ICollection&lt;客户&gt;从产品添加ICollection&lt; UserPriceList&gt;两者都有。