Cette chose me rend fou, et l'erreur n'a aucun sens pour moi:
Impossible de mettre à jour le EntitySet 'TableB' car il a un DefiningQuery et aucun élément n'existe dans l'élément pour prendre en charge l'opération en cours.
Mes tableaux sont mis comme ceci:
TableauA int idA (identité, clé primaire) ... TableauB int idA (FK pour TableA.idA) int val
TableB n'a pas de clé primaire définie dans le serveur SQL. Entity Framework a importé la table et l'association et défini les deux champs comme clé. Mais cela produira cette erreur lorsque j'essaierai de faire une insertion dans la table!
Qu'est-ce qui ne va pas??
Edit: Comme suggéré par Alex, la solution était la suivante:
- Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML
- Localisez l'entité dans l'élément edmx: StorageModels
- Supprimer complètement la DefiningQuery
- Renommez le magasin: Schema = "dbo" en Schema = "dbo" (sinon, le code générera une erreur indiquant que le nom n'est pas valide)
- Supprimer le magasin: propriété Name
J'ai laissé la clé telle quelle, car il m'était normal que les deux colonnes fassent partie de la clé.
asp.net
entity-framework
Palantir
la source
la source
Réponses:
Eh bien, lorsqu'une table est rencontrée sans PrimaryKey, elle est traitée comme une vue.
Et les vues apparaissent dans le fichier EDMX (ouvert dans un éditeur XML pour voir) dans l'élément StorageModel \ EntitySet [n] \ DefiningQuery.
Lorsque vous avez une DefiningQuery, l'entité devient en lecture seule sauf si vous ajoutez des fonctions de modification. Vous avez besoin de 3 fonctions de modification (alias procédures stockées) une pour chacune des fonctions d'insertion, de mise à jour et de suppression.
Mais vous avez deux options:
Changez la définition de clé:
Dans votre cas, je recommande (1).
la source
Ajoutez simplement une clé primaire à la table. C'est tout. Problème résolu.
la source
Il me manquait une clé primaire sur ma table et j'ai reçu ce message d'erreur. Une chose que j'ai notée est qu'après avoir ajouté la clé à la table, je devais effacer la table de l'edmx à l'aide du concepteur, enregistrer l'edmx, puis la mettre à jour à nouveau pour ajouter la table. Il ne prenait pas la clé car il était déjà assigné comme vue. Cela ne nécessitait pas de modifier manuellement l'edmx.
la source
Ajouter la clé primaire à la table, supprimer le modèle du modèle edmx, puis sélectionner la mise à jour à partir de la base de données, construire et exécuter ...
la source
@Palantir. Vérifiez que vos deux tables ont des clés primaires définies et soyez prudent avec plusieurs clés primaires définies dans une table.
la source
J'espère que cela résoudra le problème.
la source