繁体   English   中英

如何使用Entity Framework Core 2.0为X实体创建链接的X实体

[英]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.ProductProductLink.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM