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
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas pourquoi utilisez-vous couramment de la cartographie? Votre modèle doit être adressée par défaut de conventions. Si vous souhaitez mapper il parle couramment cartographie de l'utilisation:
{"Invalid column name 'Product_ProductId'.\r\nInvalid column name 'Product_ProductId'.\r\nInvalid column name 'Product_ProductId'."}
Êtes-vous à l'aide de la base de données existante?
Base de données existante avec la ligne du parent (Produit)
J'ai ajouter des informations à la question, j'ai posté le DDL
Ok, j'ai modifié la réponse devrait donc la carte de la FK à colonne appropriée.
OriginalL'auteur Ladislav Mrnka
Ce a la réponse correcte:
http://agilenet.wordpress.com/2011/04/18/entity-framework-code-first-specify-foreign-key-name-in-one-to-many-relationship-with-fluent-api/
J'ai presque eu:
J'ai juste oublié de mettre le capital à charge(c'est à dire ProductPriceList. J'espère que je me fais de la bonne terminologie, a voulu rester à l'écart de parent-enfant terminologie ^_^):
De l'Entity Framework Couramment Cartographie est à peine couramment, il y a un peu de bégayer vous pourriez involontairement engager si vous n'êtes pas très familier avec chaque méthode de nuances 🙂 Lookie que, j'ai presque été correct. En passant à la fois
ProductPricing
etProductPriceList
aspect redondant, à peine intuitive.EF parle couramment la cartographie n'est guère un bon courant(de l'intuitivité qui devrait être une qualité innée de l'interface de citoyen, n'est-ce pas?
OriginalL'auteur Hao