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

hgtggwj0  于 2023-02-15  发布在  Mysql
关注(0)|答案(3)|浏览(133)

我正在尝试运行此查询:

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数据库优先
  • 网络框架4
  • MYSQL服务器5.6

MySQL. Data和MySQL. Data. Entity的版本为www.example.com6.6.5.0
TruncateTime is supported by MySQL.
Same thing happened to this person.

7gcisfzg

7gcisfzg1#

我不能解决它,所以我只是在数据库中创建了一个名为"TruncateTime"的函数。

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

很管用,但我不喜欢。
这些人做了类似的事情:
Alternative to EntityFunctions.AddSeconds for MySQL
CurrentUtcDateTime does not exist - Entity Framework and MySql
所以现在我认为这可能是不必要的,我可以直接从数据库调用它,仍然可以获得实体,类似于这样:

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

仅此而已。

fjaof16o

fjaof16o2#

A Torres' response中的方法是有效的,但我觉得有点笨拙,所以我找到了另一种方法(这对EF6有效,对EF5也有类似的方法,但我无法测试它):
1.创建类DatabaseFunctions并向其中添加以下代码:

[Function(FunctionType.BuiltInFunction, "Date")]
public static DateTime? Date(DateTime? dateValue) 
    => Function.CallNotSupported<DateTime>();

1.将以下行添加到DbContext中的OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder){
    modelBuilder.Conventions.Add(new FunctionConvention<DatabaseFunctions>())
    // ...
}

1.使用数据库函数.日期而不是实体函数.截断时间。

slsn1g29

slsn1g293#

不需要我删除它(EntityFunctions.TruncateTime)与我合作

相关问题