J'ai ajouté un nouveau modèle de données d'entité ADO.Net dans mon projet et utilisé l' assistant de mise à jour pour ajouter des tables dans le modèle. Cinq des tables sélectionnées ont été ajoutées à l'aire de conception. Deux autres tables ne s'ajouteront pas. Je les sélectionne dans l'assistant et clique sur Terminer, mais ils n'apparaissent jamais sur l'aire de conception.
S'agit-il d'un bogue ou y a-t-il des situations où une table ne peut pas être ajoutée au modèle (par conception)?
MISE À JOUR: Le XML (* .edmx) révèle le problème.
<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not
have a primary key defined and no valid primary key could be inferred.
This table/view has been excluded. To use the entity you will need to
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
<Property Name="role_id" Type="decimal" />
<Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->
.net
visual-studio-2008
entity-framework
ado.net
primary-key
Robert Claypool
la source
la source
Réponses:
L'aire de conception est différente du modèle d'entité. Il est possible d'avoir un tableau dans le mapping dans votre EDMX qui n'apparaît pas sur l'aire de conception. Affichez le fichier au format XML pour voir si tel est le cas. Dans ce cas, l'assistant de mise à jour ne vous permettra pas de rajouter les tables, car elles font déjà partie du modèle d'entité. Ainsi, de manière générale, l'assistant de mise à jour en sait plus sur votre modèle d'entité que sur l'aire de conception en soi .
Je ne pense pas que ce soit exactement la situation dans laquelle vous vous trouvez, mais cela devrait vous donner une idée générale de la solution: allez dans le XML et recherchez des références aux tables en question.
la source
Définissez les clés primaires sur toutes les tables ou une seule case à cocher non cochée "Autoriser null" sur n'importe quelle colonne de chaque table. Ça marche pour moi :)
la source
1.Modifiez la structure du tableau et ajoutez une colonne principale. Mettez à jour le modèle.
Modifiez le fichier .EDMX dans l'éditeur XML et essayez d'ajouter une nouvelle colonne sous la balise pour cette table spécifique. (NE FONCTIONNERA PAS)
Au lieu de créer une nouvelle colonne principale vers la table de sortie, je créerai une clé composite en impliquant toutes les colonnes existantes.
Entity Framework: ajout de DataTable sans clé primaire au modèle d'entité.
la source
J'ai eu ce problème aussi, tout ce qui précède n'a pas fonctionné pour moi. Ce qui m'a aidé, c'est ce qui suit.
Lorsque vous essayez de vous connecter à une base de données, cette base de données peut avoir différents utilisateurs avec des informations d'identification différentes qu'elle peut accepter. Disons que l'utilisateur A jusqu'à D.
Si vous essayez de vous connecter avec un utilisateur, assurez-vous que l'utilisateur a les bonnes informations d'identification activées, dans ce cas, les options de lecture et d'écriture sont activées.
Pour ce faire, démarrez MS SQL Server Managment Studio, connecté à votre serveur SQL et sélectionnez la base de données avec laquelle vous essayez d'établir une connexion dans Visual Studio. Sous 'votre_nom_bd' -> Sécurité -> Utilisateurs, vous trouverez une liste d'utilisateurs. Cliquez avec le bouton droit sur le nom d'utilisateur avec lequel vous essayez de vous connecter et sélectionnez les propriétés. Une fenêtre s'ouvre. Sélectionnez la page 'Général' (sélectionnée par défaut) et sous l'onglet 'Appartenance au rôle de base de données' «Appartenance au assurez-vous que «db_datareader» et «db_datawrite» sont sélectionnés.
Remarque: lorsque vous vous connectez trop MS SQL Server Managment Studio, assurez-vous de vous connecter avec un utilisateur qui peut activer / désactiver ces options ...
la source
Vérifiez les «Nulls» dans votre table particulière. Si toutes les colonnes sont définies sur «Autoriser Null», Entity Framework la considère comme une table «Null». J'ai eu le même problème et décoché 'Autoriser Null' et il a ajouté la table requise.
la source
Les tables sans clé primaire ne seront pas ajoutées.
la source
Ma solution à cela est de supprimer le modèle entier et de le lire, y compris les nouvelles tables que je souhaite.
J'ai accidentellement supprimé une table dans le concepteur une fois et je n'ai pas pu la lire. Par conséquent, supprimer le modèle entier et le lire.
J'ai également eu quelques problèmes avec cela (le modèle de données d'entité Ado.Net ne se met pas à jour correctement )
la source
Ce problème a été résolu dans la dernière version (environnement: VS 2012, .net framework 4.5). Ouvrez simplement le fichier .edmx et ajoutez les tables / procédures stockées / vues requises. La table / vue qui n'a pas de clé primaire sera créée en tant que table / vue en lecture seule.
la source
Vous n'avez pas besoin de supprimer le modèle entier (cela peut être des centaines de tables!).
L'assistant peut gérer "l'ajout de nouveaux" éléments, mais certains changements tels que la modification des clés composites et le changement de nom des colonnes - il ne sait pas quoi faire - donc il n'essaye pas - et les choses se désynchronisent.
SO: SUPPRIMEZ les tables en question du modèle (mode conceptuel) ET du Model.Store, puis mettez à jour le modèle à l'aide de l'assistant et ajoutez à nouveau uniquement les tables en question.
la source
Je vais simplement donner plus de détails à quiconque n'a pas eu à le faire auparavant. J'utilise Visual Studio 2013 avec la mise à jour 4 installée. J'ai ajouté quelques champs à une table, supprimé la table de mon modèle, puis mis à jour et cela ne me permettait pas de vérifier l'une des tables.
J'ai une clé primaire.
J'ai créé une nouvelle table de test, qui est apparue et elle me permettrait de la vérifier mais pas mon original.
Je ne l'ai jamais ouvert en XML auparavant et je ne savais pas comment faire cela. Vous faites un clic droit sur le fichier .edmx et «ouvrez avec» - choisissez l'éditeur xml.
la table en question était bien là, elle avait même les nouveaux champs (étrange).
J'ai supprimé toutes les références (cela a pris quelques fois) - après en avoir supprimé une et sauvegardée, si vous essayez de l'ouvrir et qu'elle ne s'affichera pas, choisissez "Afficher XML" - regardez les erreurs et, fondamentalement, suivez la balle qui rebondit jusqu'à ce que vous l'ayez nettoyée.
espérons que les détails supplémentaires aident quelqu'un.
Joe
la source
Un moyen simple que j'ai trouvé était (dans SQL Server Management Studio) d'ajouter une colonne ID de type INT, de désélectionner "Autoriser les Nulls", et sous Propriétés de la colonne (de l'ID) >> Spécification d'identité >> vérifier (Is Identity), et faire sûr que l'incrément est défini.
Une fois que ce qui précède est fait, retournez dans votre fenêtre .edmx, cliquez avec le bouton droit de la souris et mettez à jour le modèle à partir de la base de données.
la source
Vous pouvez ajouter une table croisée de colonne de clé primaire. Alors le problème se résout
la source
Une autre solution consiste à vous assurer que le compte par lequel vous accédez à la base de données dispose de certaines autorisations sur la table, sélectionnez au moins. La table ne sera pas ajoutée si le compte ne dispose d'aucune autorisation.
Dans SSMS, sous Sécurité, cliquez avec le bouton droit sur l'utilisateur ou le rôle, puis sur Propriétés. Cliquez ensuite sur Securables. Le tableau du haut montre les tableaux actuellement accessibles. Si les tables manquantes ne sont pas là, cliquez sur rechercher et trouver, puis mettez-les en surbrillance dans le tableau du haut, puis attribuez des autorisations dans le tableau du bas
la source