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

EF Core数据库优先模式下如何将视图用作等效表?

EF Core 通过视图插入数据触发并发异常的问题与解决

环境

-.NET 6 + Entity Framework Core(其他版本相关方案也可接受)

数据库对象定义

基础表 MyTable

MyTable (
    int Id, 
    char Type, 
    varchar(50) Data
)
  • Id 为自增标识列,同时是主键

视图 MyView

create view MyView as
    select Id, Data 
    from MyTable
    where Type = 'A'

视图插入触发器 MyViewInsert

alter trigger MyViewInsert on MyView
instead of insert as
    insert into MyTable(Type, Data)
    select 'A', Data 
    from Inserted

EF Core 上下文配置

modelBuilder.Entity<MyView>().ToTable("MyView");

partial void OnModelCreatingPartial(ModelBuilder modelBuilder) 
{
    modelBuilder.Entity<MyView>(entity => {
        entity.HasKey(e => new { e.Id });
        entity.Property(e => e.Id).ValueGeneratedOnAdd();
    });
}

出现的错误

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: 'Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded..'

问题

推测异常原因是触发器执行插入操作后,EF Core 未获取到返回的自增Id,现寻求:

  • 更优的实现方案
  • 针对当前触发器场景的解决办法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:40:34