具有有效负载的实体框架代码优先自引用父级子级

大黄蜂

我试图首先在实体框架中使用代码进行设置,但遇到了麻烦。要描述我要完成的工作:

有一个产品实体。该产品可选地可以具有一个或多个相关的“子”产品。一个产品可以是一个或多个父产品的子级。

当我生成与模型类“ Product”关联的控制器时,出现错误:(更新,更具体,与下面的代码匹配)

 There was an error running the selected code generator:
'Unable to retrieve metadata for 'ProductCatalog.Models.Product'.
 Multiple object sets per type are not supported. The object sets 
'Product' and 'Products' can both contain instances of type
'ProductCatalog.Models.Product'.

这是不起作用的模型类:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace ProductCatalog.Models
{
    // Product
    public class Product
    {
        [Key]
        public int ProductId { get; set; } // ProductID (Primary key)
        public string ProductName { get; set; } // ProductName
        public string ProductSku { get; set; } // ProductSKU
        public int BaseQuantity { get; set; } // BaseQuantity
        public decimal BaseCost { get; set; } // BaseCost

        // Reverse navigation
        public virtual ICollection<RelatedProduct> ParentProducts { get; set; } // RelatedProduct.FK_RelatedProductChildID
        public virtual ICollection<RelatedProduct> ChildProducts { get; set; } // RelatedProduct.FK_RelatedProductParentID

        public virtual ICollection<RelatedProduct> RelatedProducts { get; set; }
    }


    // RelatedProduct
    public class RelatedProduct
    {
        [Key, Column(Order = 0)]
        public int ParentId { get; set; } // ParentID
        [Key, Column(Order = 1)]
        public int ChildId { get; set; } // ChildID
        public int Quantity { get; set; } // Quantity
        public bool Required { get; set; } // Required
        public bool Locked { get; set; } // Locked

        // Foreign keys
        public virtual Product ParentProduct { get; set; } //  FK_RelatedProductParentID
        public virtual Product ChildProduct { get; set; } //  FK_RelatedProductChildID
    }

    public class ProductDBContext : DbContext
    {
        public IDbSet<Product> Product { get; set; } // Product
        public IDbSet<RelatedProduct> RelatedProduct { get; set; } // RelatedProduct

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<RelatedProduct>()
                .HasRequired(a => a.ParentProduct)
                .WithMany(b => b.ChildProducts)
                .HasForeignKey(c => c.ParentId) // FK_RelatedProductParentID
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<RelatedProduct>()
                .HasRequired(a => a.ChildProduct)
                .WithMany(b => b.ParentProducts)
                .HasForeignKey(c => c.ChildId); // FK_RelatedProductChildID

        }
    }
}
大黄蜂

通过复数DbSet进行修复

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace ProductCatalog.Models
{
    // Product
    public class Product
    {
        [Key]
        public int ProductId { get; set; } // ProductID (Primary key)
        public string ProductName { get; set; } // ProductName
        public string ProductSku { get; set; } // ProductSKU
        public int BaseQuantity { get; set; } // BaseQuantity
        public decimal BaseCost { get; set; } // BaseCost

        // Reverse navigation
        public virtual ICollection<RelatedProduct> ParentProducts { get; set; } // RelatedProduct.FK_RelatedProductChildID
        public virtual ICollection<RelatedProduct> ChildProducts { get; set; } // RelatedProduct.FK_RelatedProductParentID

        public virtual ICollection<RelatedProduct> RelatedProducts { get; set; }
    }


    // RelatedProduct
    public class RelatedProduct
    {
        [Key, Column(Order = 0)]
        public int ParentId { get; set; } // ParentID
        [Key, Column(Order = 1)]
        public int ChildId { get; set; } // ChildID
        public int Quantity { get; set; } // Quantity
        public bool Required { get; set; } // Required
        public bool Locked { get; set; } // Locked

        // Foreign keys
        public virtual Product ParentProduct { get; set; } //  FK_RelatedProductParentID
        public virtual Product ChildProduct { get; set; } //  FK_RelatedProductChildID
    }

    public class ProductDBContext : DbContext
    {
        public IDbSet<Product> Products { get; set; } // Product
        public IDbSet<RelatedProduct> RelatedProducts { get; set; } // RelatedProduct

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<RelatedProduct>()
                .HasRequired(a => a.ParentProduct)
                .WithMany(b => b.ChildProducts)
                .HasForeignKey(c => c.ParentId) // FK_RelatedProductParentID
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<RelatedProduct>()
                .HasRequired(a => a.ChildProduct)
                .WithMany(b => b.ParentProducts)
                .HasForeignKey(c => c.ChildId); // FK_RelatedProductChildID

        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

成功添加具有父级引用的子级实体后,子级不会显示在父级资源下

来自分类Dev

实体框架优先优先加载父级子级-子级始终为空

来自分类Dev

实体框架核心父级/子级带有多级子级的清理查询

来自分类Dev

当子级具有复合PK时,如何在父级实体中定义@OneToMany?

来自分类Dev

如何使flexbox的父级具有其子级的宽度?

来自分类Dev

JOptionPane:parentComponent没有有效的父级

来自分类Dev

Doctrine 2 ZF3 自引用实体未更新父级的所有字段

来自分类Dev

实体框架6克隆数据库中的父级和所有子级

来自分类Dev

MongoDB,具有子ID的父级或具有单个父ID的子级?

来自分类Dev

具有类/数据库的循环引用(C#,实体框架代码优先)

来自分类Dev

获取具有ID的父级的子级元素的子级元素

来自分类Dev

数据存储区实体应始终具有父级

来自分类Dev

NHibernate映射-自引用:父级和子级

来自分类Dev

代码优先实体框架具有多对多的多个集合

来自分类Dev

实体框架代码优先迁移在EF5中有效,但在EF6中无效

来自分类Dev

创建具有多个父级的子页面

来自分类Dev

使用EF Core 5.0加载自引用实体(只需在其导航属性中获取父级及其子级)

来自分类Dev

为进程设置更高的优先级级别是减少其对系统负载/ CPU时间的影响的有效方法吗?

来自分类Dev

具有优先级的RxJava Zip

来自分类Dev

实体框架5代码优先自引用关系

来自分类Dev

实体框架5代码优先自引用关系

来自分类Dev

实体框架6代码优先中的自引用

来自分类Dev

一种实现循环优先级队列的有效方法?

来自分类Dev

具有expandablelistview父级水平scrollview子级的视频库

来自分类Dev

在具有HierarchyID的SQL Server中选择父级和子级

来自分类Dev

将类添加到具有子级的CSS的父级

来自分类Dev

如何从具有相同名称的父级和子级扩展方法

来自分类Dev

具有多个相同类型的父级的Mysql子级

来自分类Dev

当您只知道父级时,jquery更改某些具有特定css的子级的css

Related 相关文章

  1. 1

    成功添加具有父级引用的子级实体后,子级不会显示在父级资源下

  2. 2

    实体框架优先优先加载父级子级-子级始终为空

  3. 3

    实体框架核心父级/子级带有多级子级的清理查询

  4. 4

    当子级具有复合PK时,如何在父级实体中定义@OneToMany?

  5. 5

    如何使flexbox的父级具有其子级的宽度?

  6. 6

    JOptionPane:parentComponent没有有效的父级

  7. 7

    Doctrine 2 ZF3 自引用实体未更新父级的所有字段

  8. 8

    实体框架6克隆数据库中的父级和所有子级

  9. 9

    MongoDB,具有子ID的父级或具有单个父ID的子级?

  10. 10

    具有类/数据库的循环引用(C#,实体框架代码优先)

  11. 11

    获取具有ID的父级的子级元素的子级元素

  12. 12

    数据存储区实体应始终具有父级

  13. 13

    NHibernate映射-自引用:父级和子级

  14. 14

    代码优先实体框架具有多对多的多个集合

  15. 15

    实体框架代码优先迁移在EF5中有效,但在EF6中无效

  16. 16

    创建具有多个父级的子页面

  17. 17

    使用EF Core 5.0加载自引用实体(只需在其导航属性中获取父级及其子级)

  18. 18

    为进程设置更高的优先级级别是减少其对系统负载/ CPU时间的影响的有效方法吗?

  19. 19

    具有优先级的RxJava Zip

  20. 20

    实体框架5代码优先自引用关系

  21. 21

    实体框架5代码优先自引用关系

  22. 22

    实体框架6代码优先中的自引用

  23. 23

    一种实现循环优先级队列的有效方法?

  24. 24

    具有expandablelistview父级水平scrollview子级的视频库

  25. 25

    在具有HierarchyID的SQL Server中选择父级和子级

  26. 26

    将类添加到具有子级的CSS的父级

  27. 27

    如何从具有相同名称的父级和子级扩展方法

  28. 28

    具有多个相同类型的父级的Mysql子级

  29. 29

    当您只知道父级时,jquery更改某些具有特定css的子级的css

热门标签

归档