Canonical Function “EntityFunctions.TruncateTime” does not exist in MYSQL

前端 未结 2 679
遥遥无期
遥遥无期 2020-12-06 03:27

I\'m trying to run this query:

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


        
相关标签:
2条回答
  • 2020-12-06 03:59

    I couldn't resolve it, so I just created a Function named "TruncateTime" in the database.

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

    And it works, but I don't like it.

    These people did similar things:

    Alternative to EntityFunctions.AddSeconds for MySQL

    CurrentUtcDateTime does not exist - Entity Framework and MySql

    So now I think that might be unnecessary and I can just call it directly from the database and still get entities, something like this:

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

    And that's all.

    0 讨论(0)
  • 2020-12-06 04:02

    The approach in A Torres' response works, but it felt a bit hacky for me, so I have found another approach (This works for EF6, for EF5 a similar approach exists, but I can't test it):

    1. Create class DatabaseFunctions and add the following code to it:

      [Function(FunctionType.BuiltInFunction, "Date")]
      public static DateTime? Date(DateTime? dateValue) 
          => Function.CallNotSupported<DateTime>();
      
    2. Add the following line to OnModelCreating in your DbContext

      protected override void OnModelCreating(DbModelBuilder modelBuilder){
          modelBuilder.Conventions.Add(new FunctionConvention<DatabaseFunctions>())
          // ...
      }
      
    3. Use DatabaseFunctions.Date instead of EntityFunctions.TruncateTime.

    0 讨论(0)
提交回复
热议问题