例如,我有Poduct
实体:
public class Product : DatabaseEntity
{
public int Id {get; set;}
public int Name {get; set;}
public decimal Price {get; set;}
...
}
我的想法是想为产品创建类似产品的可编辑集合。所以它就像多对多但是在同一个实体 - 产品所以我更新了我的模型,如下所示:
public class Product : DatabaseEntity
{
public int Id {get; set;}
public int Name {get; set;}
public decimal Price {get; set;}
public ICollection<Product> SimilarProducts { get; private set; }
public void AddSimilar(Product product)
{
SimilarProducts.Add(product);
}
...
}
我也更新了我的DbContext
课程:
modelBuilder.Entity<Product>()
.HasMany(p => p.SimilarProducts)
.WithOptional()
.WillCascadeOnDelete(false);
实施了编辑产品操作:
public ActionResult Edit(ProductEditModel productEditModel)
{
if(!string.IsNullOrEmpty(productEditModel.SelectedSimilarProductLinkName))
{
var similarProduct = _productRepository.GetProduct(productEditModel.SelectedSimilarProductId);
product.AddSimilar(similarProduct);
}
_productRepository.AddProduct(product);
}
void IProductRepository.AddProduct(产品);
public void AddProduct(Product product)
{
_repository.InsertOrUpdate(product);
}
但是我得到了奇怪的结果:产品在我的数据库中添加了Product_Id
字段,并且没有像ProductProduct
表那样存储相关产品ID的东西,就像通常很多实体一样实现。如何手动创建此表?我错过了什么或做错了什么?
答案 0 :(得分:0)
感谢Swell的建议,已经找到了解决方案:
<强>型号:强>
public class Product : DatabaseEntity
{
public int Id {get; set;}
public int Name {get; set;}
public decimal Price {get; set;}
public ICollection<Product> ParentSimilars { get; set; }
public ICollection<Product> ChildSimilars { get; set; }
[NotMapped]
public IEnumerable<Product> SimilarProducts
{
get
{
return ChildSimilars.Concat(ParentSimilars);
}
}
...
}
DbContext设置:
modelBuilder.Entity<Product>()
.HasMany(p => p.ChildSimilars)
.WithMany(p => p.ParentSimilars)
.Map(m =>
{
m.MapLeftKey("Product_Id");
m.MapRightKey("SimilarProduct_Id");
});
那基本上都是。