Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core SQL';AS';从EntityFrameworkCore 2.1升级并中断代码时添加的关键字_.net Core_Entity Framework Core - Fatal编程技术网

.net core SQL';AS';从EntityFrameworkCore 2.1升级并中断代码时添加的关键字

.net core SQL';AS';从EntityFrameworkCore 2.1升级并中断代码时添加的关键字,.net-core,entity-framework-core,.net Core,Entity Framework Core,我已经做了好几天了,准备放弃 我继承了一个使用2.1的.NET核心项目,包括EntityFrameworkCore 2.1 我在代码中有一个EF查询,每当我触摸版本号时就会抛出一个异常(我曾尝试使用2.2,但甚至尝试了2.1.11甚至2.1.1!) SqlException:关键字“AS”附近的语法不正确。 因此,我决定查看将要运行的语句的控制台日志,我可以看到一个区别,它只在我更新EntityFrameworkCore时出现,但在网上找不到任何东西来记录或帮助我 原始查询如下所示开始: SEL

我已经做了好几天了,准备放弃

我继承了一个使用2.1的.NET核心项目,包括EntityFrameworkCore 2.1

我在代码中有一个EF查询,每当我触摸版本号时就会抛出一个异常(我曾尝试使用2.2,但甚至尝试了2.1.11甚至2.1.1!)

SqlException:关键字“AS”附近的语法不正确。

因此,我决定查看将要运行的语句的控制台日志,我可以看到一个区别,它只在我更新EntityFrameworkCore时出现,但在网上找不到任何东西来记录或帮助我

原始查询如下所示开始:

SELECT [WebsiteCategory].[CategoryID], [WebsiteCategory].[WebSiteID], CASE
    WHEN [t].[Name] IS NULL OR ([t].[Name] = N'')
    THEN [WebsiteCategory.Category].[Category] ELSE [t].[Name]
在升级(甚至仅仅升级到2.1.1)之后,我看到了这一点

SELECT [WebsiteCategory].[CategoryID], [WebsiteCategory].[WebSiteID], CASE
    WHEN [t].[Name] AS [Name0] IS NULL OR ([t].[Name] AS [Name0] = N'')
    THEN [WebsiteCategory.Category].[Category] ELSE [t].[Name] AS [Name0]
这个变化是一个神秘的
,因为[Name0]
不知从哪里冒出来

不幸的是,我的SQL不是很强,我只需要使用基本的SELECT查询,因为我的大部分开发都使用EntityFramework

有什么想法吗?这阻碍了我们升级到2.2,我担心这将意味着我们再也不会升级EntityFramework了

编辑:Linq查询是

return\u productRepository.Context.WebSiteCategory
.GroupJoin(_productRepository.Context.CategoryTranslations
.Where(z=>z.Locale==culture.Name),
WebsiteCategory=>WebsiteCategory.CategoryId,
Translation=>Translation.CategoryId,
(x,y)=>new{websitegority=x,Translation=y})
.SelectMany(
xy=>xy.Translation.DefaultIfEmpty(),
(x,翻译)=>新{x.websitegority,Translation})
。选择(s=>new
{
s、 网站类别,
s、 翻译
})
.Where(x=>websiteIds.Contains(x.websitegority.WebSiteId))
.选择(x=>new
{
x、 WebsiteCategory.CategoryId,
x、 WebsiteCategory.WebSiteId,
x、 WebsiteCategory.Category.Category,
x、 翻译。姓名,
x、 WebsiteCategory.Category.CategorySeo,
x、 WebsiteCategory.Category.Order
})
.GroupBy(x=>new
{
x、 类别,
x、 网站ID,
x、 类别,
x、 名字,
x、 分类,
x、 命令
})
.选择(x=>new ProductCategoryTo
{
CategoryId=x.Key.CategoryId,
WebSiteId=x.Key.WebSiteId,
Category=string.IsNullOrEmpty(x.Key.Name)?x.Key.Category:x.Key.Name,
CategorySEO=x.Key.CategorySEO,
订单=x.Key.Order
})
.OrderBy(x=>x.Order)
.ToList();

我能够用类似的LINQ查询形状重现问题。问题是由表达式引起的

  string.IsNullOrEmpty(x.Key.Name) ? x.Key.Category : x.Key.Name
GroupBy
之后。表达式的实际类型不是必需的,它似乎发生在除属性访问或聚合方法之外的任何表达式中

显然这是EF核心回归错误。我所能说的是,他们一直在进行查询转换,当然还有
GroupBy
优化。然而,随着改进,不幸的是,它们引入了回归。在(如果)他们修复之前,除了寻找解决办法,你什么都做不了

解决方法是在
GroupBy
之后预先选择这些表达式或将它们嵌入
GroupBy
键中,以避免在
GroupBy
之后出现此类表达式。例如,将示例查询更改为

.GroupBy(x => new
{
    x.CategoryId,
    x.WebSiteId,
    Category = string.IsNullOrEmpty(x.Name) ? x.Category : x.Name, // <--
    x.Name,
    x.CategorySeo,
    x.Order
})
.Select(x => new ProductCategoryDTO
{
    CategoryId = x.Key.CategoryId,
    WebSiteId = x.Key.WebSiteId,
    Category = x.Key.Category, // <--
    CategorySEO = x.Key.CategorySeo,
    Order = x.Key.Order
})
.GroupBy(x=>新建)
{
x、 类别,
x、 网站ID,
Category=string.IsNullOrEmpty(x.Name)?x.Category:x.Name,//new ProductCategoryTo
{
CategoryId=x.Key.CategoryId,
WebSiteId=x.Key.WebSiteId,

Category=x.Key.Category,//您能显示LINQ查询示例吗?这可能是一个与查询模式相关的错误/问题,但为了更具体,我需要能够复制它。添加-但我不明白为什么它在2.1版本中工作,而不是更高版本!绝对英雄。您刚刚保存了我的周日下午:)这正是问题所在,我可以通过一个更精确的谷歌搜索看到,微软已经意识到了这一点,并计划在3.0中解决它。