【发布时间】:2018-03-22 21:07:09
【问题描述】:
在过去的几天里,我一直致力于创建不同类之间的关系。不幸的是,我无法解决它,希望您能进一步帮助我。您可以在下面找到问题定义。
我有以下课程:
- BaseEntity
- 产品
- 类别
- 标签
- 产品类别
- 产品标签
BaseEntity 类:
public class BaseEntity
{
public long Id { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
public BaseEntity { }
}
产品类别:
public class Product: BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public long CategoryId { get; set; }
public virtual Category MainCategory { get; set; }
public virtual ICollection<ProductSubCategory> ProductSubCategories { get; set; }
public virtual ICollection<ProductTag> ProductTags { get; set; }
}
类别类:
public class Category : BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<ProductSubCategory> ProductSubCategories{ get; set; }
}
标签类:
public class Tag: BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<ProductTag> ProductTags { get; set; }
}
ProductSubCategory 类:
public class ProductSubCategory : BaseEntity
{
public long ProductId { get; set; }
public Product Product{ get; set; }
public long SubCategoryId { get; set; }
public Category Category { get; set; }
}
ProductTag 类:
public class ProductTag: BaseEntity
{
public long ProductId { get; set; }
public Product Product{ get; set; }
public long TagId { get; set; }
public Tag Tags { get; set; }
}
一个产品有一个主要类别。 (一对多)
一个产品可以有许多子类别。 (多对多)
一个产品可以有很多标签。 (多对多)
我的班级地图是这样的:
产品图:
public ProductMap(EntityTypeBuilder<Product> entityBuilder)
{
entityBuilder.HasOne(p => p.MainCategory)
.WithMany(c => c.Products)
.HasForeignKey(p => p.CategoryId)
.OnDelete(DeleteBehavior.SetNull);
}
ProductSubCategoryMap:
public ProductSubCategoryMap(EntityTypeBuilder<ProductSubCategory> entityBuilder)
{
entityBuilder
.HasKey(psc=> new { psc.ProductId, psc.CategoryId });
entityBuilder
.HasOne<Product>(psc => psc.Product)
.WithMany(p => p.ProductSubCategories)
.HasForeignKey(psc => psc.ProductId);
entityBuilder
.HasOne<Category>(psc=> psc.Category)
.WithMany(sc => sc.ProductSubCategories)
.HasForeignKey(psc => psc.CategoryId);;
}
ProductTagMap:
public ProductTagMap(EntityTypeBuilder<ProductTag> entityBuilder)
{
entityBuilder
.HasKey(pt => new { pt.ProductId, pt.TagId});
entityBuilder
.HasOne<Product>(pt => pt.Product)
.WithMany(p => p.ProductTags)
.HasForeignKey(pt=> pt.ProductId);
entityBuilder
.HasOne<Tag>(pt => pt.Tag)
.WithMany(t => t.ProductTags)
.HasForeignKey(pt => pt.TagId);
}
如何设置:
Product(MainCategory) 和 Category 之间的一对多。
产品(子类别)和类别之间的多对多
Product(Tags) 和 Tag 之间的多对多。
提前致谢。
【问题讨论】:
标签: asp.net entity-framework many-to-many one-to-many asp.net-core-2.0