InvalidOperationException lors de l'appel de SaveChanges dans le cadre d'entité .NET

.net c# entity-framework

Question

J'essaie d'apprendre à utiliser le framework Entity, mais j'ai résolu un problème que je ne peux pas résoudre. Ce que je fais est que je parcours une liste de films que j'ai et insère chacun dans une base de données simple.

C'est le code que j'utilise

private void AddMovies(DirectoryInfo dir)
{
    MovieEntities db = new MovieEntities();
    foreach (DirectoryInfo d in dir.GetDirectories())
    {
        Movie m = new Movie { Name = d.Name, Path = dir.FullName };
        db.AddToMovies(movie);
    }
    db.SaveChanges();
}

Lorsque je le fais, je reçois une exception à la lecture de db.SaveChanges ().

Les modifications apportées à la base de données ont été validées avec succès, mais une erreur s'est produite lors de la mise à jour du contexte de l'objet. ObjectContext peut être dans un état incohérent. Message d'exception interne: AcceptChanges ne peut pas continuer car les valeurs de clé de l'objet sont en conflit avec un autre objet dans ObjectStateManager. Assurez-vous que les valeurs de clé sont uniques avant d'appeler AcceptChanges.

Je n'ai pas été en mesure de savoir ce qui cause ce problème. Ma table de base de données contient trois colonnes
Id int autocrement
Nom nchar (255)
Chemin nchar (255)

Mise à jour: J'ai vérifié mon fichier edmx et la section SSDL ont le StoreGeneratedPattern = "Identity" comme suggéré. J'ai également suivi le post du blog et essayé d'ajouter ClientAutoGenerated = "true" et StoreGenerated = "true" dans le CSDL comme suggéré ici. Cela a entraîné des erreurs de compilation (Erreur 5: l'attribut 'ClientAutoGenerated' n'est pas autorisé.). Depuis que l'article de blog date de 2006 et qu'il comporte un lien vers un article de suivi, je suppose qu'il a été modifié.

Cependant, je ne peux pas lire le post suivant car il semble nécessiter un compte msdn.

Réponse acceptée

J'ai trouvé la solution à cela.

Ce qui s'est passé, c'est que lorsque j'ai créé ma table, j'ai oublié d'ajouter la clé primaire et de définir la propriété (Is Identity) sur yes. J'ai ensuite créé mon modèle d'entité et j'ai eu cette erreur.

Je suis revenu en arrière et j'ai réparé ma table de base de données mais j'ai toujours l'exception bizarre. Ce qui a finalement résolu le problème, c’est de supprimer l’entité et de la recréer une fois la table réparée.

Plus d'exceptions :)


Réponse populaire

la dernière fois que j'ai essayé le code suivant et j'ai dit que ça fonctionnait bien

bs.SuspendBinding();
Data.SaveChanges();
bs.ResumeBinding();

Les choses importantes que je vais vous dire aujourd'hui sont les suivantes:

1- si nous utilisons le code ci-dessus pour suspendre la liaison, nous devons en faire plus pour résoudre de nombreux scénarios tels que la perte d'index dans les collections et les liaisons de détail principales

2- si nous utilisons le code suivant à la place du code ci-dessus, l'exception sera supprimée et tout ira bien, sans qu'il soit nécessaire d'écrire plus de code

        Data.SaveChanges(System.Data.Objects.SaveOptions.None);

J'espère que cela résout vos problèmes similaires

Merci mes amis



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow