我正在使用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上添加侦听器不会显示查询。
基本上我想要批量删除大量数据而不必先检索它们。
答案 0 :(得分:3)
我遇到了这个问题,并找到了解决方案。只需将Locator的默认BatchRunner从SqlServerBatchRunner更改为MySqlBatchRunner,它就可以与MySQL一起使用。
EntityFramework.Locator.Current.Register<EntityFramework.Batch.IBatchRunner>(
() => new EntityFramework.Batch.MySqlBatchRunner());
相关问题: https://github.com/loresoft/EntityFramework.Extended/issues/163
答案 1 :(得分:1)
我确定这是因为你使用的是mysql。我知道EF的Bulk工具都不适用于mysql。如果你查看source / Database for Extended,它只包含SqlServer和SqlCompact。
您可以自己编写Sql并通过Entityframework执行该操作。