无法跟踪实体类型“ Decks”的实例,因为已经跟踪了另一个键值为“ {CardId:578}”的实例

时间:2020-04-20 10:45:20

标签: mysql asp.net entity-framework api asp.net-core

我是EF-Core的新手,然后尝试一下。我陷入了一个问题,想在MySQL表中更新或插入条目。

模型如下:

    public partial class Decks
    {
        public int DecklistId { get; set; }
        public int CardId { get; set; }
        public int Amount { get; set; }
        public bool Maindeck { get; set; }
        public virtual Cards Card { get; set; }
    }
}

实体配置如下:

modelBuilder.Entity<Decks>(entity =>
                {
                    entity.HasKey(e => new { e.DecklistId, e.CardId, e.Maindeck })
                        .HasName("PRIMARY"); ;

                    entity.HasIndex(e => e.CardId);

                    entity.ToTable("decks");

                    entity.Property(e => e.DecklistId).HasColumnName("decklistID");

                    entity.Property(e => e.CardId).HasColumnName("cardID");

                    entity.Property(e => e.Maindeck).HasColumnName("maindeck");

                    entity.Property(e => e.Amount).HasColumnName("amount");

                    entity.HasOne(e => e.Card)
                        .WithOne()
                        .HasPrincipalKey<Decks>(b => b.CardId);
                });

我在仓库中使用此代码来了解是否应更新或插入数据。

public async Task<StandardResponse> UpdateDeck(List<Decks> deckCards)
        {
            StandardResponse errors = new StandardResponse { message = null, status = 200 };
            try
            {
                deckCards.ForEach(x =>
               {
                   Decks existingCard = _context.Decks.Find(x.DecklistId,x.CardId, x.Maindeck);
                   if (existingCard == null)
                   {
                       _context.Decks.Add(x); <---- Here occurs the Error
                   }
                   else
                   {
                       _context.Entry(existingCard).CurrentValues.SetValues(x);
                   }
                   _context.SaveChanges();
               });
            }
            catch (DbUpdateException ex)
            {
                return new StandardResponse { message = ex, status = 501 };
            }
            return new StandardResponse { message = "Deck updated!", status = 200 };
        }

当我必须具有相同DecklistId和相同CardId的对象时,出现问题。即使Maindeck属性不同,我也会收到错误,并且我无法向自己解释原因... 这是我要插入/更新的对象列表。

将添加第一个对象。当然,在数据库中找不到第二个对象,并且在添加语句中会发生错误。

[ 
{ 
    "decklistId": 28,
    "cardId": 578,
    "amount": 4,
    "maindeck": true
},
{
    "decklistId": 28,
    "cardId": 578,
    "amount": 4,
    "maindeck": false
}
]

那会是什么?

感谢大家的帮助!

0 个答案:

没有答案