gpt4 book ai didi

c# - 使用 EntityFramework.Extended 的简单批量删除会抛出语法错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:51 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 6.1.1 和 MySQL 5.6.24,我想批量删除大量记录。我正在使用 EntityFramework.Extended以提高性能。

但是我的第一个非常简单的更新查询已经失败了:

DbContext.Tickets.Where(t => t.EventID == targetEvent.EventID).Delete();

这会在 mscolib 中抛出 AggregateException,内部异常是 MySQLException:

[MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[youreal_TicketPlatform].[Tickets]
FROM [youreal_TicketPlatform].[Tickets] AS j' at line 1]
MySql.Data.MySqlClient.MySqlStream.ReadPacket() +501
MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) +444
MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) +136
MySql.Data.MySqlClient.MySqlDataReader.NextResult() +1254
MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +2626
MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() +137
EntityFramework.Batch.<InternalDelete>d__0`1.MoveNext() +1350

有没有人遇到过同样的错误?查看正在执行的实际查询的最简单方法是什么?在 DbContext.Database.Log 上添加监听器不会显示查询。

基本上,我想批量删除大量数据,而不必先检索它们。

最佳答案

我遇到了这个问题并找到了解决方案。只需将 Locator 的默认 BatchRunner 从 SqlServerBatchRunner 更改为 MySqlBatchRunner,它将与 MySQL 一起工作。

EntityFramework.Locator.Current.Register<EntityFramework.Batch.IBatchRunner>(
() => new EntityFramework.Batch.MySqlBatchRunner());

存储库中的相关代码: https://github.com/loresoft/EntityFramework.Extended/blob/master/Source/EntityFramework.Extended/Locator.cs

相关问题: https://github.com/loresoft/EntityFramework.Extended/issues/163

关于c# - 使用 EntityFramework.Extended 的简单批量删除会抛出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com