gpt4 book ai didi

c# - EntityFramework 6.1.3 和 MySQL DbFunctions.TruncateTime 不存在?

转载 作者:可可西里 更新时间:2023-11-01 07:44:28 26 4
gpt4 key购买 nike

尝试使用此查询获取今天输入的事物的数量。

var today = DateTime.Today;
var unitsPassedToday = await this.db.Sessions
.Where(x => DbFunctions.TruncateTime(x.FinishTime) == today)
.CountAsync();

得到以下异常:

FUNCTION db.TruncateTime does not exist

我发誓我以前用过这个功能。我没有任何对 System.Data.Entity 的引用,这是我使用 Google 搜索找到的唯一解决方案。这是 EntityFramework 的 MySQL 实现的某种错误吗?显然我可以编写一个返回此信息的存储过程,但我有点想知道为什么这不起作用?

MySQL 服务器是 5.5.23-enterprise。

现在感觉有点傻,看起来这应该是一个简单的问题,而我只是忽略了一些简单的事情......

编辑:

这是 SQL Entity Framework 生成的...

SELECT
`GroupBy1`.`A1` AS `C1`
FROM (SELECT
COUNT(1) AS `A1`
FROM `sessions` AS `Extent1`
WHERE (TruncateTime(`Extent1`.`finish_time`)) = @p__linq__0) AS `GroupBy1`

我很确定 TruncateTime 不是有效的 MySQL 函数,为什么要调用它?我想我还应该补充说我使用的是 EDMX 图,而不是先编码。我已经在我的 web.config 中添加了 codeConfigurationType 来定位 MySQL ...

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

MySql.Data.Entity 是版本 6.9.6.0

最佳答案

人们使用存储过程来解决这个问题。

Create FUNCTION TruncateTime(dateValue DateTime) RETURNS date return Date(dateValue);

所以它非常非常困惑。但除了使用存储过程外,我还使用了这个变体。

var yesterday = DateTime.Now.AddDays(-1);

var newCustomersCount = _context
.Customers
.Where(x => x.RegisterDate > yesterday)
.ToList()
.Where(x => x.RegisterDate.Date == DateTime.Now.Date)
.Count();

我们选择所有比昨天更新的记录。 .ToList() 执行一个查询,然后我们过滤我们想要的。此方法选择最少的必要记录。

关于c# - EntityFramework 6.1.3 和 MySQL DbFunctions.TruncateTime 不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834517/

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