2015-05-26 47 views
0

我正在使用實體框架6.1.1與MySQL 5.6.24,我想批量刪除一大組記錄。 我正在使用EntityFramework.Extended來提高性能。簡單批量刪除使用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上添加偵聽器不會顯示查詢。

基本上我想批量刪除大量的數據,而不必先檢索它們。

回答

1

我確定這是因爲你使用的是mysql。 EF的散裝工具沒有一個知道用於mysql。如果你在源碼/數據庫中查看擴展,它只包含SqlServer和SqlCompact。

您可以自己編寫Sql並通過Entityframework執行該Sql。

+0

我肯定會考慮移動在這之後到SQL,它似乎不支持MySQL的足夠的業務應用... –

3

我遇到過這個問題並找到了解決方案。只需將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