阻止 EF Core 使用"合并到插入"



我正在将我的应用程序转换为.NET Core。 在这样做时,我遇到了 EF Core 和插入的问题。

如果我插入 1 或 2 行,则 EF Core 执行正常的 SQLINSERT语句。

但是当我有 3 行或更多行时,它会切换到MERGE语句,然后失败并显示:

列引用"插入。不允许使用"MyKeyColumn",因为它引用此语句中未修改的基表。

我的猜测是,这是因为查询实际上是在具有插入触发器以更新视图下的实际表的视图上运行的。

就像我说的,当它使用插入语句时,这工作得很好。 但是当它尝试使用合并插入时它会失败。

有没有办法阻止 EF Core 使用MERGE进行插入?

因此,更多的研究表明了一种强制使用单个插入的方法:

optionsBuilder.UseSqlServer(connectionString, options =>
{
options.MaxBatchSize(1);
});

警告:这将导致所有插入都是单独的插入语句。 对于大容量刀片来说性能不高。

相同的错误消息,但 EF core 7 中的原因不同:

列引用"..."是不允许的,因为它引用此语句中未修改的基表。

由 EF 核心 7 中的中断性更改导致。

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/breaking-changes#sqlserver-tables-with-triggers

默认情况下,EF Core 现在通过效率更高的技术保存更改;遗憾的是,如果目标表具有数据库触发器或某些类型的计算列,则 SQL Server 不支持此技术。

提供的修复可以按表应用

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.HasTrigger("SomeTrigger"));
}

"SomeTrigger"可以是任何字符串。

相关内容

  • 没有找到相关文章

最新更新