Nombre de membres dans le type conceptuel ne correspond pas au nombre de membres sur le type de côté de l'objet

j'utilise .net framework 3.5 SP1.

après avoir ajouté une colonne à une table dans Sql Server( ainsi que changer une colonne existante de "allowing nulls" À "not nullable"), Je ne peux plus exécuter mon projet sans obtenir cette erreur:

Le nombre de membres dans le conceptuel de type "Xbrldimensionalmodèle.axis_t " n' correspond au nombre de membres sur le type de côté de l'objet 'En fin de vie.Xbrl.Persistance.Données.axis_t'. Assurez-vous que le nombre de membres être la même.

j'ai renoncé à essayer de trouver et de corriger le code généré. J'ai maintenant supprimé tous mes fichiers liés à l'entité locale et je les ai générés de nouveau en partant de zéro et en ajoutant un nouvel élément (ADO.NET modèle de données de L'entité). J'obtiens toujours cette erreur.

la seule façon que je puisse exécuter le projet maintenant est de défaire toutes mes modifications en attente et d'utiliser la dernière version du contrôle source, et bien sûr changer les deux colonnes de base de données modifiées à nullable.

D'après ce que j'ai lu jusqu'à présent, il semble que j'aurais simplement dû être capable de "mettre à jour" mon modèle à partir de la base de données. Il en est résulté cette exception (ci-dessus). Mais maintenant je suis totalement confus que même avec une régénération complète du modèle d'entité et des classes de soutien je reçois toujours cette erreur.

j'ai changé la propriété sur mon modèle edmx: "Metadata Artifact Processing" en "Copy to Output Directory". designer.cs, csdl, msl, lsed fichiers semblent tous être compatible avec les derniers changements de DB.

l'exception est lancée la première fois que mon instance entityModel est référencée. C'est donc avant tout chargement ou sauvegarde des données de la table changée.

des idées où je vais mal? Grâce, TG

21
demandé sur TG. 2010-01-19 22:27:02

9 réponses

ouvrez votre modèle en XML. Supprimer toutes les références à ce type dans la CSDL. Enregistrer et fermer, puis rouvrir dans l'interface graphique. Maintenant, vous devriez être en mesure de mettre à jour le modèle, comme d'habitude. Si cela ne fonctionne pas, faire la même chose, mais Supprimer de MSL aussi bien.

7
répondu Craig Stuntz 2010-01-19 20:13:14

cette erreur peut aussi se produire si le fichier EDMX a été modifié en dehors de Visual Studio. Cliquez avec le bouton droit de la souris sur le fichier EDMX et cliquez sur "Exécuter L'outil personnalisé"

32
répondu Chui Tey 2011-12-27 07:37:02

Cela semble un peu bavard pour un commentaire, donc je suis en ajoutant ce que l'autre réponse:

en réponse à la suggestion de Craig, j'ai ouvert le fichier edmx dans un visualiseur XML et j'ai supprimé toutes les références à Axis_t (y compris les associations dues aux clés étrangères). À partir de la totalité du fichier.

j'ai alors "mis à jour" le modèle en ouvrant le fichier edmx comme interface GUI, clic droit | rafraîchir à partir de la base de données | Add (tab) qui ne Liste désormais que la table Axis_t. J'ai ajouté le tableau qui semblait bon travail et inclus ma nouvelle colonne et la colonne a été mappée correctement.

j'ai ensuite mené le projet au même résultat. Même erreur que celle affichée ci-dessus.

je suis maintenant retourné à ce qui était dans le contrôle source ainsi que la modification des colonnes de base de données (nouvelle et modifiée une) comme nullable. Le projet fonctionne très bien. Je n'ai toujours pas réussi à implémenter la nouvelle colonne DB dans EF. Il se comporte comme s'il est stocké/version compilée du modèle qui est n'étant pas mis à jour au moyen du processus de "mise à jour".

1
répondu TG. 2010-01-19 21:41:47

lors du changement d'une clé étrangère de nullable à non-nullable (ou vice-versa), assurez-vous de changer la multiplicité d'association de 0..1 à 1 (ou vice-versa). Le concepteur manque parfois cela dans une mise à jour de la base de données.

1
répondu Michael L Perry 2010-04-12 20:26:21

je faisais face à la même question, quand j'ai ajouté une colonne à db et ajouté propriété respective à entité(edmx). J'utilisais aussi le contrôle source pour ma solution. Comme je l'ai remarqué, en sauvegardant les modifications dans n'importe quel fichier, sauvegardez les messages d'action avec l'option overwrite. Donc, j'ai remplacé le concepteur.cs ainsi fichier de configuration et le problème est résolu.

ce qui concerne, bhushan

1
répondu user1784524 2013-01-22 07:00:31

cela m'est arrivé quand je travaillais sur deux versions de la même application (avec des différences de modèles) qui se compilent dans les mêmes dossiers.

il semble que Visual Studio ne "nettoie" pas correctement le dossier temporaire" obj " et certains fragments de l'ancien modèle sont toujours là.

si je supprime simplement tous les fichiers du dossier " obj " et recompile cette erreur disparaît.

le modèle dans chaque version est parfait ce qui me conduisait fou.

ne Pas dire que c'est la réponse à la discussion de la question, mais il est certainement un autre la raison de cette erreur.

Steve

0
répondu samneric 2012-03-08 18:06:57

j'ai eu ce même problème pendant des heures. Trouvé dans ma Concepteur.fichier cs une des propriétés de mon entité manquait ses attributs. (Je ne sais pas comment c'est arrivé?)

 [EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)]
 [DataMemberAttribute()]
 public global::System.Int32 ContractCapacity

maintenant le message d'erreur a du sens, c'était le décembre de données manquant. Une fois que l'attribut a été ajouté il a fonctionné!!!

0
répondu JBrooks 2012-07-30 00:13:27

voici un scénario cauchemardesque que je viens de vivre: j'ai un site web MVC2 et un service WCF qui sont construits séparément, mais partagent une configuration. Dans les deux projets, j'ai utilisé le même nom de conteneur D'entité; c'est pourquoi j'ai choisi la même chaîne de connexion pour les deux projets. Par la suite, les métadonnées sont sorties de la synchronisation entre les deux et ont causé cette erreur. La solution évidente a été de ne pas utiliser le même nom de conteneur D'entité dans les deux projets; en changeant à un nom différent m'a permis de spécifiez des chaînes de connexion uniques, et donc des métadonnées, pour chaque composant qui a évité le problème.

Maintenant que j'ai compris, c'est évident, mais j'ai eu une tendue heure ou deux!

0
répondu Paul Keister 2012-08-21 06:15:45
  • clic Droit sur votre edmx le fichier et l'ouvrir avec XML.
  • Trouvez les types de données incorrects et modifiez-les.
  • Enregistrer le fichier.

Cela a fonctionné pour moi.

0
répondu Brothersin.co.uk 2012-10-06 11:23:23