【问题标题】:how to use canonical functions in Entity Framework and Mysql如何在实体框架和 Mysql 中使用规范函数
【发布时间】:2015-07-25 22:47:38
【问题描述】:

我想使用 MySql 数据库在 EntityFramework 中将时间跨度添加到 DateTime。

我尝试过使用DbFunctions.AddMinutes(someminutes)EntityFunctions.AddMinutes(someminutes),但是当我执行时我得到了类似的异常

FUNCTION projectName.AddMinutes 不存在

我已经用谷歌搜索但找不到如何执行规范函数。虽然有一个函数列表,但我还是不知道它们属于哪个类 https://msdn.microsoft.com/en-us/library/bb738563.aspx

我正在使用

  1. MySql.Data.Entities 6.8.3.0
  2. EntityFramework 6.0.0
  3. MySql.Data 6.8.4
  4. MySql.Web 6.8.4
  5. MySql(数据库)5.6.17

我的 Linq 查询如下

IQueryable<OrderViewModel> orders = _dbContext.Orders
                         .OrderByDescending(x => x.ID)
                         .Select(x => new OrderViewModel 
                                        { ID = x.ID,
                                          AddedOn = DbFunctions.AddMinutes(x.AddedOn, diffMinutes).Value, 
                                          Customer = (x.IsGuestCheckOut == true ? x.CustomerEmail : x.Customer.FirstName + " " + x.Customer.LastName), 
                                          Phone = x.Phone, 
                                          TotalAmount = x.TotalAmount, 
                                          OrderStatus = x.OrderStatus });

在某些应用条件和分页的地方

【问题讨论】:

  • 你是否在 usings 中添加了 System.Data.Entity 命名空间?
  • @AdilMammadov 是的,它已经在那里了。

标签: c# mysql entity-framework entity-framework-6


【解决方案1】:

其实我误会了它不是的错误

FUNCTION projectName.AddMinutes 不存在

但是

FUNCTION databaseName.AddMinutes 不存在

我不知道问题是什么。我有不兼容的驱动程序/连接器吗,我不知道。

为了解决这个问题,我刚刚创建了名为 AddMinutes 的函数,它在内部调用 DATE_ADD() 函数。函数定义如下

CREATE FUNCTION `AddMinutes`(actualDateTime datetime, minutesToAdd int)
RETURNS datetime
BEGIN
    RETURN DATE_ADD(actualDateTime, INTERVAL minutesToAdd MINUTE);
END

我知道这不是正确的解决方案,而是 HACK

【讨论】:

    【解决方案2】:

    AddMinutes 方法是 DateTime 类的一部分,因此您可以使用 DateTime 类的实例,即

    DateTime dateNow = new DateTime.Now;
    dateNow.AddMinutes(someminutes);
    

    DbFunctions.AddMinutes(expression, number) 此函数只能出现在 LINQ to Entities 查询中 (https://msdn.microsoft.com/en-us/library/dn220081(v=vs.113).aspx):

    Context.Train.Where(x => EntityFunctions.AddMinutes(x.Start, 10) > DateTime.Now)
    

    【讨论】:

    • 你确定你的mysql驱动支持规范函数吗?
    • 如何检查驱动是否支持规范函数?
    • 昨天我检查了你在 MSSQL 数据库上的 linq 查询,它可以正常工作。今天,我将在我的 Windows 上安装 MySql 数据库并检查你的 linq 查询。我会写你我使用什么样的连接器,条件是它可以工作。
    • FUNCTION projectName.AddMinutes 不存在 它是 FUNCTION databaseName.AddMinutes 不存在。我做了一个黑客来解决这个问题。我创建了内部调用 DATE_ADD() 的 AddMinutes 函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多