在过去的几天里,我一直致力于创建不同类之间的关系。不幸的是,我无法解决它,希望你能进一步帮助我。您可以在下面找到问题定义。
我有以下课程:
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; }
}
产品有一个主要类别。 (一到多) 产品可以有许多子类别。 (许多上多) 产品可能有很多标签。 (许多上多)
我的班级地图是这样的:
ProductMap:
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类中添加
public virtual Catagory Catagory { get; set; }
如果你需要它作为一个集合,那么就像你在其他人中那样添加它,并且可能命名ICollection Catagories而不是单数。
public virtual ICollection<Catagory> Catagories { get; set; }