Как сопоставить дочернюю сущность к родительской сущности без введения родительского компоновщика примитивного типа в дочернюю сущность?

У меня есть эти классы:

public class Product
{
    [Key]
    public virtual int ProductId { get; set; }
    public virtual string ProductName { get; set; }
    public virtual string Category { get; set; }

    public virtual IList ProductPriceList { get; set; }


    [Timestamp]
    public virtual byte[] Version { get; set; }
}

public class ProductPricing
{        

    // no ProductId here
    public virtual Product Product { get; set; }

    [Key]
    public virtual int ProductPricingId { get; set; }

    public virtual DateTime EffectiveDate { get; set; }
    public virtual decimal Price { get; set; }


}

Это мой modelBuilder:

modelBuilder.Entity().
    HasMany(x => x.ProductPriceList)
   .WithRequired()
   .HasForeignKey(x => x.Product);

Это ошибка:

Компонент внешнего ключа «Продукт» не является объявленным свойством на введите "ProductPricing". Убедитесь, что он не был исключен явно из модели и что это допустимое примитивное свойство.

ОБНОВЛЕНИЕ

Я пробовал следующие, соответствующие ошибки под кодом

modelBuilder.Entity()
    .HasMany(x => x.ProductPriceList)
    .WithRequired();

{"Недопустимое имя столбца 'Product_ProductId1'. \ r \ nНеверное имя столбца 'Product_ProductId'. \ R \ nНеверное имя столбца 'Product_ProductId1'. "}

modelBuilder.Entity()
    .HasMany(x => x.ProductPriceList)
    .WithRequired()
    .Map(x => x.MapKey("ProductId"));

{" Недопустимое имя столбца 'Product_ProductId'. "}

modelBuilder.Entity()
    .HasMany(x => x.ProductPriceList)
    .WithRequired(x => x.Product);

{" Недопустимое имя столбца 'Product_ProductId'. \ R \ nНеверное имя столбца 'Product_ProductId'. "}

modelBuilder.Entity()
    .HasMany(x => x.ProductPriceList)
    .WithRequired(x => x.Product)
    .Map(x => x.MapKey("ProductId"));

{" Нарушено ограничение множественности. Роль Product_ProductPriceList_Source отношения 'TestEfCrud.Mappers.Product_ProductPriceList' имеет кратность 1 или 0..1. "}

Если это может помочь, вот DDL:

create table Product
(
ProductId int not null identity(1,1) primary key,
ProductName varchar(100) not null,
Category varchar(100) not null,
Version rowversion not null
);

create table ProductPricing
(
ProductId int not null references Product(ProductId),
ProductPricingId int identity(1,1) not null primary key,
EffectiveDate datetime not null,
Price decimal(18,6) not null
);

ОБНОВЛЕНИЕ 2

Я пробовал этот ответ, который выглядит бит , похожий на мой случай, отображение происходит от дочернего объекта Как сначала отобразить родительский столбец в коде EF 4.1

Однако использование этого:

modelBuilder.Entity()
    .HasOptional(x => x.Product)
    .WithMany()
    .Map(x => x.MapKey("ForeignKeyColumn"));

и этого:

modelBuilder.Entity()
    .HasRequired(x => x.Product)
    .WithMany()
    .HasForeignKey(x => x.Product);

Оба результата привели к следующей ошибке:

{"Недопустимое имя столбца 'Product_ProductId1'. \ R \ nНеверное имя столбца 'Product_ProductId1'. \ R \ nНеверное имя столбца 'Product_ProductId1'. "}

5
задан Community 23 May 2017 в 10:34
поделиться