У меня есть эти классы:
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'. "}