一尘不染

MYSQL中不存在规范函数“ EntityFunctions.TruncateTime”

mysql

我正在尝试运行此查询:

DateTime DDate=DateTime.Today; //Today's date without Time
var v= db.measurements.Where(m => EntityFunctions.TruncateTime(m.InDate) == DDate);

它只是返回两个日期相等的对象,而忽略时间部分。

但我收到:

{“功能[数据库] .TruncateTime不存在”}

堆栈跟踪:

at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)

我在用着:

  • C#Visual Studio 2010
  • EntityFramework 4数据库优先
  • 网络框架4
  • MYSQL服务器5.6

MySQL.Data和MySQL.Data.Entity的版本是6.6.5.0

MySQL支持TruncateTime。

这个人也发生了同样的事情。


阅读 335

收藏
2020-05-17

共1个答案

一尘不染

我无法解决它,所以我只在数据库中创建了一个名为“ TruncateTime”的函数。

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

它有效,但我不喜欢它。

这些人做了类似的事情:

MySQL的EntityFunctions.AddSeconds的替代方法

CurrentUtcDateTime不存在-
实体框架和MySql

所以现在我认为这可能是不必要的,我可以直接从数据库中直接调用它并仍然获取实体,如下所示:

var x = db.ExecuteStoreQuery<Measurement>(@"SELECT field1,field2
FROM   Measurements
WHERE  Date(InDate) = {0}", DDate);

就这样。

2020-05-17