Cette chose me rend fou, et l'erreur n'a aucune signification pour moi:
Impossible de mettre à jour EntitySet 'TableB' car il contient une DefiningQuery et aucun élément n'existe dans l'élément prenant en charge l'opération en cours.
Mes tables sont mises comme ceci:
TableA Int idA (identité, clé primaire) ... TableB Int idA (FK pour TableA. idA) int val
TableB n'a pas de clé primaire définie sur le serveur SQL. Entity Framework a importé la table et l'association et a défini les deux champs comme clé. Mais cette erreur sera générée 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:
J'ai laissé la clé telle qu'elle était, puisqu'il était acceptable pour moi que les deux colonnes fassent partie de la clé.
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 à 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 (aussi appelées procédures stockées) une pour Insérer, Mettre à jour et Supprimer.
Mais vous avez deux options:
Changer la définition de la clé:
Dans votre cas, je recommande (1).
Ajoutez simplement une clé primaire à la table. C'est ça. Problème résolu.
ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
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, c'est qu'après avoir ajouté la clé à la table, je devais effacer la table d'edmx à l'aide du concepteur, enregistrer l'edmx, puis la mettre à jour pour rajouter la table. Ce n'était pas récupérer la clé. car il était déjà attribué en tant que vue. Cela n'a pas nécessité l'édition manuelle de l'edmx.
Ajoutez la clé primaire à la table, supprimez le modèle du modèle edmx, puis sélectionnez update from database, build and run ...... works
@Palantir. Vérifiez que les clés primaires sont définies dans vos deux tables et veillez à ce que plusieurs clés principales soient définies dans une table.