Comment carte enfant entité à entité mère sans introduire de type primitif parent de l'éditeur de liens dans l'entité enfant?

J'ai ces classes:

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; }


}

C'est mon modelBuilder:

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

C'est l'erreur:

La clé étrangère de la composante "Produit" n'est pas une propriété déclarée sur
type 'ProductPricing'. Vérifiez qu'il n'a pas été explicitement exclus
à partir du modèle et qu'il est valide primitives de la propriété.

Mise à JOUR

J'ai essayé ce qui suit, les erreurs correspondantes ci-dessous le code

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

{"Nom de colonne non valide 'Product_ProductId1'.\r\nInvalid nom de la colonne
'Product_ProductId'.\r\nInvalid nom de colonne 'Product_ProductId1'."}

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

{"Nom de colonne non valide 'Product_ProductId'."}

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

{"Nom de colonne non valide 'Product_ProductId'.\r\nInvalid nom de la colonne
'Product_ProductId'."}

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

{"Multiplicité contrainte violée. Le rôle
'Product_ProductPriceList_Source" de la relation
'TestEfCrud.Les cartographes.Product_ProductPriceList' a multiplicité 1 ou
0..1."}

Si ça peut aider, voici le 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
);

Mise à JOUR 2

J'ai essayé cette réponse, qui ressemble un peu similaire à mon cas, la cartographie issue d'enfants de l'entité
Comment la carte mère colonne en EF 4.1 le premier code

Cependant, l'utilisation de ce:

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

et ce:

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

Ont donné lieu à cette erreur:

{"Nom de colonne non valide 'Product_ProductId1'.\r\nInvalid nom de la colonne
'Product_ProductId1'.\r\nInvalid nom de colonne 'Product_ProductId1'."}

OriginalL'auteur Hao | 2011-08-03