You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让EF Core生成含主键与Year列双重条件的Update语句?

EF Core更新时将Year列加入更新条件的实现方法

有两种常用方法可以生成你需要的带id和year条件的UPDATE语句:

方法一:使用ExecuteUpdate直接批量更新(EF Core 7及以上版本支持)

这种方式不需要先查询实体,直接构造条件执行更新,效率更高:

await dbContext.Persons
    .Where(p => p.Id == 1 && p.Year == 2024)
    .ExecuteUpdateAsync(s => s.SetProperty(p => p.Name, "tom"));

EF Core会直接生成你想要的SQL:

update person 
set name = 'tom' 
where id = 1 and year = 2024

方法二:将Year标记为并发令牌,基于跟踪实体更新

如果你的业务需要先查询实体再修改,可以把Year列配置为并发令牌,EF Core更新时会自动将其加入WHERE条件,同时还能实现乐观并发检查:

步骤1:配置并发令牌(Fluent API方式)

在DbContext的OnModelCreating方法里配置实体:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>()
        .Property(p => p.Year)
        .IsConcurrencyToken();
}

步骤2:查询并修改实体

var person = await dbContext.Persons.FirstOrDefaultAsync(p => p.Id == 1 && p.Year == 2024);
if (person != null)
{
    person.Name = "tom";
    await dbContext.SaveChangesAsync();
}

执行后生成的UPDATE语句同样会包含id和year作为条件,同时如果更新时Year值已被其他操作修改,EF Core会抛出DbUpdateConcurrencyException,适合需要并发控制的场景。

内容的提问来源于stack exchange,提问作者laowei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:22:05