Cuir Cm À Sarenza Lacets Parme Chaussures 293227 Azzaro Chez Noir 2 Nnm0w8v

Question

Je reçois l'exception suivante sur mon projet;

Une exception de type 'System.InvalidOperationException' s'est produite dans EntityFramework.dll mais n'a pas été gérée dans le code utilisateur

Informations complémentaires: L'enregistrement ou l'acceptation des modifications a échoué car plusieurs entités de type 'MyProject.Data.Poco.MyProjectCountry' ont la même valeur de clé primaire. Assurez-vous que les valeurs de clé primaire explicitement définies sont uniques. Assurez-vous que les clés primaires générées par la base de données sont correctement configurées dans la base de données et dans le modèle Entity Framework. Utilisez le concepteur d'entité pour la configuration de base de données d'abord / modèle d'abord. Utilisez l'API fluide «HasDatabaseGeneratedOption» ou «DatabaseGeneratedAttribute» pour la configuration Code First.

using (MyProjectDataContext context = new MyProjectDataContext())
                {
                    MyProjectItemTag existingItemTag = (from p in context.ItemTags.Include(p => p.MyProjectGenre).Include(p => p.MyProjectCountry)
                                                     where p.MyProjectUser.UserId == ItemTag.MyProjectUser.UserId &&
                                                           p.MyProjectItem.ItemId == MyProjectItem.ItemId
                                                     select p).FirstOrDefault();


                    // new tag
                    if (existingItemTag == null)
                    {
                        existingItemTag = ItemTag;
                        existingItemTag.MyProjectItem.ItemId = MyProjectItem.ItemId;
                    }
                    // existing tag
                    else
                    {
                        existingItemTag.MyProjectItem = new MyProjectItem { ItemId = MyProjectItem.ItemId };
                        existingItemTag.MyProjectUser = new MyProjectUser { UserId = ItemTag.MyProjectUser.UserId };
                    }
                    // updates
                    existingItemTag.MyProjectCountry = MyProjectCountry;
                    if (MyProjectCountry != null)
                        existingItemTag.MyProjectCountry = new MyProjectCountry()
                        {
                            MyProjectCountryId = MyProjectCountry.MyProjectCountryId
                        };
                    existingItemTag.MyProjectGenre = MyProjectGenre;
                    context.Entry(existingItemTag.MyProjectItem).State = EntityState.Unchanged;
                    context.Entry(existingItemTag.MyProjectUser).State = EntityState.Unchanged;
                    context.Entry(existingItemTag.MyProjectCountry).State = EntityState.Unchanged;
                    context.Entry(existingItemTag.MyProjectGenre).State = EntityState.Unchanged;
                    if (existingItemTag.MyProjectCountry != null)
                    {
                        context.Entry(existingItemTag.MyProjectCountry).State = EntityState.Unchanged;
                    }
                    // db
                    context.ItemTags.AddOrUpdate(existingItemTag);
                    context.SaveChanges();
                    return existingItemTag.ItemTagId;
                }
            }

l'erreur se produit à la ligne suivante;

 context.Entry(existingItemTag.MyProjectCountry).State = EntityState.Unchanged;

Ma classe;

 public class MyProjectItemTag
    {
        public int ItemTagId { get; set; }
        public MyProjectUser MyProjectUser { get; set; }
        public MyProjectItem MyProjectItem { get; set; }
        public MyProjectCountry MyProjectCountry { get; set; }
        public MyProjectGenre MyProjectGenre { get; set; }
        public MyProjectMood MyProjectMood { get; set; }
        public MyProjectItemTag()
        {

        }
        public MyProjectItemTag(string userId, string providerContentId)
        {
            MyProjectUser = new MyProjectUser
            {
                UserId = userId
            };
            MyProjectItem = new MyProjectItem
            {
                ProviderContentId = providerContentId
            };

}} Cognac 12a826 39 92 € Chaussures Femmes Sandales Bionatura W8nv0nm CBodrxeW

Ma config;

 public class MyProjectItemTagConfiguration : EntityTypeConfiguration<MyProjectItemTag>
    {
        public MyProjectItemTagConfiguration()
        {
            ToTable("MyProjectItemTags");
            HasKey(p => p.ItemTagId);
            HasRequired(p => p.MyProjectUser);
            HasRequired(p => p.MyProjectItem);
            HasOptional(p => p.MyProjectCountry);
        }
    }

Qu'est-ce qui me manque ici?

Limelightlimelightlimeade Gel Women Kenun Asics Mx Outlet For 8mNnwv0
Cognac 12a826 39 92 € Chaussures Femmes Sandales Bionatura W8nv0nm CBodrxeW

Réponse acceptée

C'est tout ce que vous devez vraiment rechercher:

Informations complémentaires: L'enregistrement ou l'acceptation des modifications a échoué car plusieurs entités de type 'MyProject.Data.Poco.MyProjectCountry' ont la même valeur de clé primaire.

Le code suivant ne remplit pas nécessairement le MyProjectCountry .

MyProjectItemTag existingItemTag = 
  (from p in context.ItemTags
    .Include(p => p.MyProjectGenre)
    .Include(p => p.MyProjectCountry)
   where p.MyProjectUser.UserId == ItemTag.MyProjectUser.UserId 
     && p.MyProjectItem.ItemId == MyProjectItem.ItemId
   select p).FirstOrDefault();

Vous définissez donc une variable que vous ne nous avez pas non plus définie de contexte ...

existingItemTag.MyProjectCountry = MyProjectCountry;

Je suppose que ce n'est pas nul, donc vous changez son ID qui est une odeur de code géant ...

Cognac 12a826 39 92 € Chaussures Femmes Sandales Bionatura W8nv0nm CBodrxeW

(Pourquoi l'assigner? Après tout c'est déjà assigné ..)

if (MyProjectCountry != null)
  existingItemTag.MyProjectCountry = new MyProjectCountry()
  {
    MyProjectCountryId = MyProjectCountry.MyProjectCountryId
  };

Ensuite, vous dites à EF que cela n'a pas changé? Une autre odeur de code.

context.Entry(existingItemTag.MyProjectCountry).State = EntityState.Unchanged;

Donc, cela me dit que le contexte a déjà téléchargé cette entité dans son cache d’objets, mais celui que vous assignez n’est pas celui du cache. Ainsi, lorsque j’essaie d’ajouter au cache, il y a un doublon.


Réponse populaire

34 Couture Femmes 2019 Talons Carré Patchwork Chaussures Marron Wonp0k8 9IEWDH2Y

Essayez d’utiliser la méthode context.Model.AddORUpdate (model), vous devez également l’ajouter à l'aide de System.Data.Entity.Migrations pour cette méthode.

Cognac 12a826 39 92 € Chaussures Femmes Sandales Bionatura W8nv0nm CBodrxeW

Sous licence: CC-BY-SANike Flyknit Chaussures 402bleu Utility Air Vapormax Ah6834 Qrdtsh USVzMqpG with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Timberland Brook Chaussures Homme Oxford Marron Park WDIH2YE9