EF Core MySQL包含(变量)类似运算符

时间:2016-10-28 15:32:48

标签: mysql entity-framework entity-framework-core asp.net-core-webapi

我正在使用带有EF Core的ASP.NET Web API Core来创建一个返回JSON格式记录的方法 当我对类似运算符(%varible%)使用包含时,出现以下消息时出现错误:

  

Microsoft.EntityFrameworkCore.dll中发生了'MySql.Data.MySqlClient.MySqlException'类型的异常,但未在用户代码中处理

     

其他信息:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'+'%'

附近使用正确的语法      

在第4行订购pStoreIdpCategoryId'

似乎符号之一不在正确的位置 我检查了我的代码和原始sql输出,但没有看到任何问题 希望有人可以帮助我!

var query = from p in db.Products
            join c in db.ProductCategory
                   on new { p.StoreId, p.CategoryId } equals new { c.StoreId, c.CategoryId } into pc
            from c in pc.DefaultIfEmpty()
            where (p.ProductName.Contains("a"))
            select p;  

query.ToList()

原始SQL

SELECT `p`.`StoreId`, `p`.`ProductId`, `p`.`CategoryId`, `p`.`Description`, `p`.`ImagePath`, `p`.`ProductName`, `p`.`SalesPeriodFrom`, `p`.`SalesPeriodNeverEnd`, `p`.`SalesPeriodTo`, `p`.`SalesUnit`, `p`.`UnitPrice`, `c`.`StoreId`, `c`.`CategoryId`, `c`.`CategoryName`
FROM `Products` AS `p`
LEFT JOIN `ProductCategory` AS `c` ON (`p`.`StoreId` = `c`.`StoreId`) AND (`p`.`CategoryId` = `c`.`CategoryId`)
WHERE `p`.`ProductName` LIKE ('%' + 'a') + '%'
ORDER BY `p`.`StoreId`, `p`.`CategoryId`

Windows 7 Professional x64
Visual Studio 2015专业版 MySQL 5.6.17

Microsoft .NET Core 1.0.1
与依赖

   "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
   "Microsoft.AspNetCore.Mvc": "1.0.1",
   "Microsoft.AspNetCore.Routing": "1.0.1",
   "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
   "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
   "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
   "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
   "Microsoft.Extensions.Configuration.Json": "1.0.0",
   "Microsoft.Extensions.Logging": "1.0.0",
   "Microsoft.Extensions.Logging.Console": "1.0.0",
   "Microsoft.Extensions.Logging.Debug": "1.0.0",
   "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
   "MySql.Data.EntityFrameworkCore": "7.0.5-IR21",
   "System.Linq.Dynamic.Core": "1.0.6.6"

1 个答案:

答案 0 :(得分:2)

我发现从" 7.0.6-IR31"更改MySql.Data.EntityFrameworkCore到" 6.10.0-alpha"将导致有效的SQL语法。

6.10.0-alpha更新。

但是,会出现另一个问题。请看这里。

use parameter from method argument inside linq contains

我认为除了等待更新修复bug之外别无选择。