asp.net-mvc - EF Core 调用 INSERT 而不是 UPDATE
问题描述
我调用 UPDATE,但添加了一个新行。为什么这可能?模型中的 ID 是正确的。即使我将纯粹的 Refresh 留在管理器中,它仍然会以这种方式发生。模型:
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);
}
}
解决方案
您可以通过 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;
推荐阅读
- firebase - 将新项目写入 firebase 时出现错误状态
- r - 当数据框中有数据时,为什么 R 会给我 NA 值?
- kdb - 使用向量函数对每两个元素求和
- python - 如何在python中使用lxml获取命令词?
- blazor - Blazor 上的hangfire RecurringJob
- python-3.x - python - 如何在python pandas中对以数据框的某个单词结尾的某些列求和?
- java - 具有多个手机客户端的 Spring Boot TCP 服务器
- swift - 视图控制器显示为弹出窗口
- gnuplot - 具有自定义范围的 Gnuplot 偏移量 (v5.4)
- mysql - 我如何将动态表单的值从反应发送到节点 js