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
相关产品推荐
相关产品推荐

