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

我正在尝试运行此查询:

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

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

但我收到:

{“FUNCTION [数据库] .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数据库优先
  • NetFramework 4
  • MYSQL Server 5.6

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

MySQL支持TruncateTime。

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

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

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

它有效,但我不喜欢它。

这些人做了类似的事情:

MySQL的EntityFunctions.AddSeconds的替代品

CurrentUtcDateTime不存在 – Entity Framework和MySql

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

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

就这样。

A Torres的响应方法有效,但对我来说感觉有些笨拙,所以我找到了另一种方法(这适用于EF6,对于EF5,存在类似的方法,但我无法测试它):

  1. 创建类DatabaseFunctions并向其添加以下代码:

     [Function(FunctionType.BuiltInFunction, "Date")] public static DateTime? Date(DateTime? dateValue) => Function.CallNotSupported(); 
  2. 将以下行添加到DbContext中的OnModelCreating

     protected override void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Conventions.Add(new FunctionConvention()) // ... } 
  3. 使用DatabaseFunctions.Date而不是EntityFunctions.TruncateTime。