English (en)Annecy Birkenstock Chaussure Annecy Annecy Chaussure Birkenstock Chaussure Birkenstock Birkenstock Birkenstock Chaussure Chaussure Chaussure Annecy Annecy Nyv0m8OnPw Français (fr) Español (es) Italiano (it) Deutsch (de) русский (ru) 한국어 (ko) 日本語 (ja) 中文简体 (zh-CN) 中文繁體 (zh-TW)
À Chataigne Femme Chaussures Magasin Lacets Azzaro Georgil DIEW9H2

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

}} Annecy Birkenstock Chaussure Annecy Annecy Chaussure Birkenstock Chaussure Birkenstock Birkenstock Birkenstock Chaussure Chaussure Chaussure Annecy Annecy Nyv0m8OnPw

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?

Marché Nike Bon De Basket Zoomchaussure Nkpwo0 Femme Jordan jLqA354R
Annecy Birkenstock Chaussure Annecy Annecy Chaussure Birkenstock Chaussure Birkenstock Birkenstock Birkenstock Chaussure Chaussure Chaussure Annecy Annecy Nyv0m8OnPw

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

Annecy Birkenstock Chaussure Annecy Annecy Chaussure Birkenstock Chaussure Birkenstock Birkenstock Birkenstock Chaussure Chaussure Chaussure Annecy Annecy Nyv0m8OnPw

(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

Nike Chaussure Max Air Chaussure Vapormax kiPZXu

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.

Annecy Birkenstock Chaussure Annecy Annecy Chaussure Birkenstock Chaussure Birkenstock Birkenstock Birkenstock Chaussure Chaussure Chaussure Annecy Annecy Nyv0m8OnPw

Sous licence: CC-BY-SAAsics Futsal chaussure Foot Cher crampons Pas Chaussures Mercurial E9H2DI with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Intersport Chaussures Chaussures Ville Chaussures Intersport Ville Ville Tl1JFKc