我正在使用EF Core在ASP.net Core 2.1中制作一个在线购物应用程序。 我的基本模型类是Product,Category和CategoryProduct。我的目标是要有一个单独的表,该表称为带有ProductId和CategoryId的CategoryProduct。 CategoryProduct表应将Product和Category交织在一起,并将ProductId与特定的Category相匹配,反之亦然。
我想创建这些关系:
这是我的模型-我在这里仅添加基本属性,而没有任何“显示”或“必需”属性。
public class Product
{
public Product()
{
CategoryProducts = new List<CategoryProduct>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
public int ProductId { get; set; }
public string Code { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public decimal? OldPrice { get; set; }
public int Stock { get; set; }
public virtual ICollection<CategoryProduct> CategoryProducts { get; set; }
}
public class Category
{
public Category()
{
CategoryProducts = new List<CategoryProduct>();
ChildCategories = new List<Category>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
public int CategoryId { get; set; }
public string Title { get; set; }
public int? ParentCategoryId { get; set; }
[ForeignKey("ParentCategoryId")]
[InverseProperty("ChildCategories")]
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Category> ChildCategories { get; set; }
public virtual ICollection<CategoryProduct> CategoryProducts { get; set; }
}
public class CategoryProduct
{
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
public int ProductId { get; set; }
public virtual Product Product { get; set; }
}
创建迁移时,将创建表Product,Category和CategoryProduct。我可以在用户界面中添加产品和类别,也可以在数据库中对其进行硬编码,但是在CategoryProduct表中看不到它们。
我重写了OnModelCreating
方法,如下所示,并设置了关系,但是没有任何效果。我尝试了很多组合,这似乎应该可以,但不能。
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Category>().Property(x => x.CategoryId).ValueGeneratedOnAdd();
builder.Entity<CategoryProduct>().HasKey(cp => new { cp.CategoryId, cp.ProductId });
builder.Entity<CategoryProduct>()
.HasOne(cp => cp.Category)
.WithMany(c => c.CategoryProducts)
.HasForeignKey(cp => cp.CategoryId);
builder.Entity<CategoryProduct>()
.HasOne(cp => cp.Product)
.WithMany(p => p.CategoryProducts)
.HasForeignKey(cp => cp.ProductId);
}
预先感谢您的帮助和答复,我非常感谢他们。