51 votes

Entity framework - "Problème dans les fragments de mappage" - erreur. Aidez-moi à comprendre les explications de cette erreur

Erreur 3007: Problème dans la Cartographie des Fragments de départ de la ligne 186, 205: Non-colonne de Clé Primaire(s) [WheelID] sont mappées dans les deux fragments différents aspect conceptuel propriétés - incohérence des données n'est possible que parce que le correspondant aspect conceptuel, les propriétés peuvent être modifiés séparément.

J'ai trouvé plusieurs endroits sur le web décrivant cette erreur, mais je n'ai tout simplement pas comprendre. (confus smiley va ici)

Un
Deux
Trois
Quatre

Il y a quelque chose d'assez fondamental ici, je dois être manquant. Pouvez-vous l'expliquer, afin que je le comprendre? Peut-être à l'aide de ma vraie vie exemple ci-dessous?

alt text

Clé étrangère 1:N Roues.Id -> Tranches.WheelId

- Je les ajouter à entity framework, et WheelId n'est pas visible dans les Tranches d'entité.

alt text

Faire de certains solution de contournement (suppression de la relation à partir de la db avant d'ajouter des tables à EF - puis re-création et mise à jour des EF) j'ai réussi à obtenir le WheelId pour rester en Tranches, mais ensuite, je reçois le message d'erreur mentionné dans la partie supérieure.

44voto

Craig Stuntz Points 95965

Slices.WheelId étant un FK, vous ne pouvez pas l'exposer dans votre modèle client, point à la ligne. Il existe des moyens d'obtenir la valeur, cependant.

 var wheelId = someSlice.Wheels.ID;
 

Mise à jour Dans EF 4, vous pouvez le faire en utilisant des associations FK au lieu d'associations indépendantes.

27voto

Venkat Points 499

Essayez de supprimer l'étranger colonne de propriété de l'Entité définie à l'aide de l'entité de modèle de conception, il permettra de résoudre votre problème

Par exemple

Nous avons deux tables est un client et un autre ordre, à l'aide de l'entité de modèle de conception, nous avons ajouté association entre les clients et les commandes lorsque nous faisons cela Ado.net entity framework, je vais ajouter les propriétés de navigation pour les deux tableaux ci-dessous.

Comme Client.Commandes - Ici, l'ordre est liste Ordre.Client

Un - Beaucoup de relation.

Nous avons donc besoin de retirer la propriété de avec nom de code client[colonne de clé Étrangère] de l'Ordre entité.

Pour référence:

http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/2823634f-9dd1-4547-93b5-17bb8a882ac2/

3voto

user2379589 Points 1

J'avais mis les clés étrangères dans la base de données mais le cadre n'était toujours pas en tirant dans correctement. J'ai donc essayé d'ajouter l'association de moi-même.

Cependant, quand j'ai fait ce que je voudrais obtenir une erreur de cartographie. Il m'A fallu du temps mais j'ai compris. Ce que j'ai fait a été mis en place l'association à l'aide de l'entité boîte à outils de l'association de l'outil et puis vous avez qu'à double cliquer sur l'association (1 à plusieurs) ligne et définissez le primaire et de clé étrangère là. Nous espérons que cela vous à aider d'autres personnes qui pourraient avoir le même problème. Je n'ai pas trouvé la réponse nulle part.

2voto

Mr. Jefferson Points 2742

J'ai eu ce problème pour une tout autre raison, et le message a été légèrement différente; il n'a pas dit "l'incohérence des données est possible parce que le correspondant aspect conceptuel, les propriétés peuvent être modifiés séparément."

J'ai une table dans mon modèle avec une colonne binaire où je stocke des données d'image. Je veux seulement ces données retourné quand j'en ai besoin (le rendement est une fonction), je l'ai donc divisé la table à l'aide d'une méthode similaire à cela. Plus tard, j'ai ajouté une propriété à la table, puis mis à jour le modèle de la base de données. L'assistant ajout de la propriété à la fois des types d'entité reportez-vous à la table avec l'ajout de la propriété. J'ai dû le supprimer de l'un d'entre eux pour résoudre l'erreur.

0voto

Dan Points 81

Pour les requêtes LinQ to Entities dans EF1, ma solution de contournement pour ne pas avoir accès à la clé étrangère en tant que propriété est avec le code suivant, qui ne génère pas de requête de jointure à la table associée:

 dbContext.Table1s.FirstOrDefault(c => (int?)c.Table2.Id == null)
 

c'est-à-dire que le SQL généré est:

 ...WHERE ([Extent1].[Table2Id] IS NULL)...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X