2010-10-11 4 views
2

Je suis en train de créer un 1: m relation à l'aide Entity Framework (.net 4.0) et je obtenir l'erreur suivante:Définition d'un 1 à plusieurs dans Entity Framework

App_Code.Model.msl(36,6) : error 3007: Problem in mapping fragments 
starting at lines 6, 36:Column(s) [ProductId] are being mapped in 
both fragments to different conceptual side properties. 

Ce que j'est un Table des produits et table des fonctionnalités. L'idée est que les produits ont de nombreuses fonctionnalités. Les produits ont chacun un ProductId, et les Features ont une clé étrangère ProductId.

Maintenant, le problème est que la clé étrangère n'existe pas dans le serveur SQL, et je ne le veux pas. Si c'est le cas, tout fonctionne automatiquement.

Dans le concepteur EDMX, j'ai créé une association du produit à l'entité, puis j'ai modifié les détails de mappage de l'association ProductFeature pour qu'ils soient basés sur la table Features, ce qui devrait fonctionner.

Des idées? Merci beaucoup.

+0

pourquoi ne pas vous voulez le FK? oublier EF pour une seconde, comment cela fonctionnerait-il dans une perspective SQL Server? Vous avez besoin du FK sur les fonctionnalités pour connaître l'enregistrement de produit "quel unique" auquel il appartient. Si vous dites que vous ne voulez pas ce FK, cela ressemble à beaucoup-à-plusieurs, auquel cas vous aurez besoin d'une table de jonction (c.-à-d. ProductFeatures - comme la réponse ci-dessous indique). – RPM1984

+0

Y a-t-il une raison particulière pour laquelle vous n'utilisez pas de clé étrangère? Je comprends que c'est un exemple simple, mais il semblerait selon votre description que ce devrait être un FK. –

+0

@ RPM1984 - Je ne souhaite pas apporter de modifications à la base de données, car il s'agit d'une application/base de données existante, plutôt que d'une situation greenfields. – Chris

Répondre

0

Il s'agit d'une relation M x N. Pourquoi? Parce qu'une caractéristique peut être affectée à plus d'un type de produit.

Vous devriez avoir une table Qualités des produits comme ceci:

ProductId FeatureId 
1   1 
1   2 
2   1 
2   2 
+0

Salut, ceci est juste un exemple simple à des fins d'apprentissage, dans une application réelle, vous avez raison, ce serait comme vous décrivez, mais dans ce cas, j'essaie de maîtriser les relations 1: m. – Chris

0

trouvé une solution: supprimer la propriété scalaire 'ProductID' de l'entité caractéristique:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/a71901fb-97ec-4072-949a-c0c66a9775b1

Cependant, dans l'auto -generated relations que EF vous donne si vous configurez la clé étrangère dans la base de données, les champs par exemple 'ParentId' sont présents dans l'enfant comme un champ scalaire.

Donc, je suis encore un peu confus.

-Edit- Une aide supplémentaire:

http://www.hanselman.com/blog/CreatingAnODataAPIForStackOverflowIncludingXMLAndJSONIn30Minutes.aspx

+0

Probablement à propos du code/xml généré par le concepteur. Je n'ai pas utilisé EF depuis la version 1.0 mais je me souviens qu'il y avait beaucoup de choses que vous pouviez faire en éditant directement le xml que l'UI/Designer ne supportait pas. –

+0

Merci confusedgeek, peut-être que je vais juste craindre celui-ci aux limitations de VS. – Chris

Questions connexes