gpt4 book ai didi

c# - ASP MVC MsSql 到 MySQL 迁移

转载 作者:行者123 更新时间:2023-11-29 03:28:56 25 4
gpt4 key购买 nike

对于低预算项目,我必须使用 MySql 运行 IIS Asp Mvc。迁移现有项目运行良好,但如果我使用 Take & Skip 创建 LINQ 查询,它会失败。

第一次测试(OK)

var post = _db.Posts.FirstOrDefaultAsync(a => a.id == 1234);

第二次测试(OK)

var post = _db.Posts.Include(a => a.Comments);
var result = await post.Select(a => new TRDPostViewModel
{
Created = a.Created,
Body = a.Body,
Comments = a.Comments.Select(d => new TRDCommentViewModel
{
Body = d.Body,
Id = d.Id,
}).Where(m => m.Trash == false)
.OrderByDescending(f => f.Created)
.ToList(),
}).FirstOrDefaultAsync();

第三次测试(失败)

var result = await post.Select(a => new TRDPostViewModel
{
Created = a.Created,
Body = a.Body,
Comments = a.Comments.Select(d => new TRDCommentViewModel
{
Body = d.Body,
Id = d.Id,
}).Where(m => m.Trash == false)
.OrderByDescending(f => f.Created)
.Skip(33)
.Take(10)
.ToList(),
}).FirstOrDefaultAsync();

这是跟踪:

'where 子句'MySql.Data.MySqlClient.MySqlException 中的未知列'Extent1.Id'

完全没有意义。与 MsSql 相同的代码工作正常。使用最新的 MySql.Data.Entity.EF6,Version=6.9.7.0

我错过了什么吗?花费数小时解决但没有成功。

最佳答案

你确定你的第二个查询真的没问题吗?

1) id = d.Id, <= 为什么这个逗号(不是很重要)? ('ID='是多余的)

2) .Where(m => m.Trash == false) <= 'Trash' 不在select中,所以这个属性此时不知道

3) .OrderByDescending(f => f.Created) <= 'Created' 同上

4) 为什么在 .ToList() 后加一个逗号?

我已经使用生成的数据简化了您的 DDL(不是 MWE)。我已经在 VS2013 中重现了你的问题。

我还使用 LINQPad 直接针对数据库测试了您的查询,我在第三次测试中遇到了同样的问题,可能是驱动程序 mysql 中的错误:

trdposts.Select(a => new {
Created = a.Created,
Body = a.Body,
Comments = a.Posttrdcomments
.Select(d => new { Body = d.body, Id = d.Id, d.Created, d.Trash})
.Where(m => m.Trash == 1)
.OrderByDescending(f => f.Created)
.Skip(33)
.Take(10)
.ToList()
})

给出一个更短的 SQL 查询:

SELECT t1.PostId, t1.body, t1.Id, t1.Created, t1.Trash
FROM trdposts AS t0
OUTER APPLY (
SELECT t2.body, t2.Created, t2.Id, t2.PostId, t2.Trash
FROM trdcomments AS t2
WHERE ((t2.PostId = t0.Id) AND (t2.Trash = 1))
ORDER BY t2.Created DESC
) AS t1
ORDER BY t1.Created DESC

没有 .Skip() 和 .Take(),我们得到很好的“左外连接”

关于c# - ASP MVC MsSql 到 MySQL 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790571/

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