EF Core 调用 INSERT 而不是 UPDATE

问题描述 投票:0回答:1

我调用 UPDATE,但添加了新行。为什么这可能?模型中的 ID 是正确的。即使我将纯粹的刷新留在管理器中,它仍然会发生这种情况。 型号:

public class Drink
{    
    public Drink()
    {
        ImagesCount = 0;
        Hidden = false;
    }
    
    [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key()]
    public int DrinkId { get; set; }
                  
    public string Title { get; set; }       
    
    public int Price { get; set; }               
    
    public int ImagesCount { get; set; }
    
    public bool Hidden { get; set; }
}

存储库:

public void Update(TEntity entity)
{
    dbSet.Update(entity);
    context.SaveChanges();
}

经理:

public void SaveDrink(Drink drink)
{
    if (drink.DrinkId != 0)
    {
         drinkRepository.Update(drink);
    } else {
         drinkRepository.Insert(drink);
    }
}
asp.net-mvc entity-framework asp.net-core entity-framework-core
1个回答
0
投票

您可以通过ChangeTracker检查实体的状态

public void Update(TEntity entity)
    {
       // ste breakpoint and check your entity status here
       var status = context.ChangeTracker.Entries();
       
       dbSet.Update(entity);
       context.SaveChanges();
    }

也许您的实体没有被ChangeTracker跟踪,在这种情况下,您需要将实体状态设置为已修改。

 DbSet.Attach(entity);
 var entry = Context.Entry(entity);
 entry.State = System.Data.EntityState.Modified;
© www.soinside.com 2019 - 2024. All rights reserved.