[英]ASP.NET Core 2.0 MVC EF One-to-Many and Many-to-Many relationship
在最后的日子里,我一直在努力創建不同類之間的關系。 不幸的是,我無法解決,希望您能進一步幫助我。 在下面可以找到問題的定義。
我有以下課程:
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);
}
我該如何設定:
產品(MainCategory)和類別之間一對多。
產品(子類別)和類別之間的多對多
產品(標簽)和標簽之間的多對多。
提前致謝。
首先有幾個問題,您正在使用代碼優先方法嗎? 當您使用虛擬導航屬性時。 只是想確定一下。
您當前遇到任何錯誤嗎?您嘗試了什么?失敗了嗎?
您將虛擬屬性放置在何處而不是放置在其他模型中,將為您帶來一對多的關系。 如果它們在兩個模型中都可以實現多對多關系。
在產品類別中添加
public virtual Catagory Catagory { get; set; }
如果您需要將其作為一個集合,則可以像添加其他集合一樣先添加它,然后將其命名為ICollection Catagories而不是單數。
public virtual ICollection<Catagory> Catagories { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.