Entity Framework Code First Self-Ссылка родительского ребенка с полезной нагрузкой
Я пытаюсь установить это с помощью кода сначала в рамках сущности и сталкиваюсь с трудностями. Чтобы описать, что яЯ пытаюсь достичь:
Имейте сущность Продукта. Этот продукт может иметь одно или несколько связанныхребенок» товары. Продукт может быть дочерним по отношению к одному или нескольким родительским продуктам.
когда я иду генерировать контроллер, привязанный к классу модели "Товар"яполучаю ошибку: (обновлено, более конкретно, соответствует коду ниже)
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 ParentProducts { get; set; } // RelatedProduct.FK_RelatedProductChildID
public virtual ICollection ChildProducts { get; set; } // RelatedProduct.FK_RelatedProductParentID
public virtual ICollection 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 { get; set; } // Product
public IDbSet RelatedProduct { get; set; } // RelatedProduct
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity()
.HasRequired(a => a.ParentProduct)
.WithMany(b => b.ChildProducts)
.HasForeignKey(c => c.ParentId) // FK_RelatedProductParentID
.WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(a => a.ChildProduct)
.WithMany(b => b.ParentProducts)
.HasForeignKey(c => c.ChildId); // FK_RelatedProductChildID
}
}
}