У меня есть эти классы:
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<ProductPricing> 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; }
}
Это моя модельBuilder:
modelBuilder.Entity<Product>().
HasMany(x => x.ProductPriceList)
.WithRequired()
.HasForeignKey(x => x.Product);
Это ошибка:
Компонент внешнего ключа 'Product 'не является объявленным свойством по типу' ProductPricing '.Убедитесь, что оно не было явно исключено из модели и является допустимым примитивным свойством.
ОБНОВЛЕНИЕ
Я пробовал следующее, соответствующееошибки ниже кода
modelBuilder.Entity<Product>()
.HasMany(x => x.ProductPriceList)
.WithRequired();
{"Неверное имя столбца 'Product_ProductId1'. \ r \ nНеверное имя столбца 'Product_ProductId'. \ r \ nНеверное имя столбца 'Product_ProductId1'."}
modelBuilder.Entity<Product>()
.HasMany(x => x.ProductPriceList)
.WithRequired()
.Map(x => x.MapKey("ProductId"));
{"Неверное имя столбца 'Product_ProductId'."}} 1026 *
modelBuilder.Entity<Product>()
.HasMany(x => x.ProductPriceList)
.WithRequired(x => x.Product);
{"Неверное имя столбца 'Product_ProductId'. \ R \nНеверное имя столбца 'Product_ProductId'. "}
modelBuilder.Entity<Product>()
.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
У меня естьпопробовал этот ответ, который выглядит как бит , как в моем случае, отображение возникло из child entity Как сначала отобразить родительский столбец в коде EF 4.1
Однако, используя это:
modelBuilder.Entity<ProductPricing>()
.HasOptional(x => x.Product)
.WithMany()
.Map(x => x.MapKey("ForeignKeyColumn"));
и это:
modelBuilder.Entity<ProductPricing>()
.HasRequired(x => x.Product)
.WithMany()
.HasForeignKey(x => x.Product);
Обапривело к этой ошибке:
{"Неверное имя столбца 'Product_ProductId1'. \ r \ nНеверное имя столбца 'Product_ProductId1'. \ r \ nНеверное имя столбца 'Product_ProductId1'."}