[英]How do I define an entity class to be shared as a collection across multiple entities using Entity Framework Core?
[英]How do I create linked X entities for a X entity using Entity Framework Core 2.0
我想创建一个Product实体,该实体可以将Products列表作为LinkedProducts,但是我不知道为什么我的代码不起作用。 我是学生,并且是EF核心映射的新手。
我创建了2个实体类Product.cs和ProductLink.cs,这是我的类
Product.cs
public class Product : Content
{
public virtual string Description { get; set; }
public virtual Guid? ThumbnailImageId { get; set; }
[ForeignKey("ThumbnailImageId")]
public virtual Media ThumbnailImage { get; set; }
public virtual List<ProductLink> ProductLinks { get; set; } = new List<ProductLink>();
}
ProductLink.cs
public class ProductLink : EntityBase
{
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
public virtual Guid? ProductId { get; set; }
[ForeignKey("LinkedProductId")]
public virtual Product LinkedProduct { get; set; }
public virtual Guid? LinkedProductId { get; set; }
}
错误:
无法确定由“列表”类型的导航属性“产品。产品链接”表示的关系。 手动配置关系,或者使用“ [NotMapped]”属性或通过“ OnModelCreating”中的“ EntityTypeBuilder.Ignore”忽略此属性。
您通过ProductLink.Product
和ProductLink.LinkedProduct
引用导航属性具有两个关系,但是只有一个集合导航属性Product.ProductLinks
,因此EF不知道如何映射它们。
所需的最小更改是将ProductLinks
映射到两个相关属性之一,例如使用InverseProperty
属性:
[InverseProperty("Product")]
public virtual List<ProductLink> ProductLinks { get; set; } = new List<ProductLink>();
有关更多信息,请参见关系文档主题。
因此,更多有关您在此处尝试执行的操作的信息将有所帮助。 从我的角度来看,所有内容都可以像这样合并到一个Product类中。
public class Product : Content
{
public virtual string NormalizedName { get; set; }
public virtual string ShortDescription { get; set; }
public virtual string Description { get; set; }
public virtual Guid? ThumbnailImageId { get; set; }
[ForeignKey("ThumbnailImageId")]
public virtual Media ThumbnailImage { get; set; }
[ForeignKey("ProductId")]
public virtual Guid? ProductId { get; set; }
[ForeignKey("LinkId")]
public virtual Guid? LinkId { get; set; }
public virtual List<Product> ProductLinks { get; set; } = new List<Product>();
}
您究竟收到什么错误?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.