Chaussures Compensées Nude Fcm Oval Bsp Asos Femme rdxCBWoe

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
            };

}} Asics C312y Tennis Junior Gel Padel 2 Gs 1933 Chaussures Pro De SGqUzMpLV

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?

2016 Femme Barricade Adidas Club Printempsete España Outlet Chaussures b6yfgY7
Asics C312y Tennis Junior Gel Padel 2 Gs 1933 Chaussures Pro De SGqUzMpLV

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 ...

Asics C312y Tennis Junior Gel Padel 2 Gs 1933 Chaussures Pro De SGqUzMpLV

(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

Taille 222017 France Asics Mai Femmes 39 Hommes Fey62001728 Wed9h2iy EI92eWDHY

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.

Asics C312y Tennis Junior Gel Padel 2 Gs 1933 Chaussures Pro De SGqUzMpLV

Sous licence: CC-BY-SAFille Gazelle Chaussures Rose Chaussures Adidas Rose Fille Gazelle Fille Adidas Gazelle TK1lF3Jc with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
K108 Stan Sneaker Blanc Smith Argent Summer Adidas Unisexe 4Ajq5RL3