2017-01-13 7 views
1

У меня есть задача получить набор объектов в течение определенного периода времени. Я использую первый подход кода и сервер MySql.Entity Framework 6 - DbFunctions.AddHours error

С кодом

IQueryable<Entity> query = dbContext.Set<Entity>().AsNoTracking(); 

Entity[] entities = (from e in query 
       let last = (from ee in query orderby ee.Id descending select ee).FirstOrDefault() 
       where e.Timestamp >= DbFunctions.AddHours(last.Timestamp, -hours) 
       select e).ToArray(); 

И следующий SQL генерируемой EF 6.1.3

SELECT 
`Extent1`.`Id`, 
`Extent1`.`Timestamp` 
FROM `Entities` AS `Extent1` LEFT OUTER JOIN (SELECT 
`Extent2`.`Id`, 
`Extent2`.`Timestamp` 
FROM `Entities` AS `Extent2` 
ORDER BY 
`Extent2`.`Id` DESC LIMIT 1) AS `Limit1` ON 1 = 1 
WHERE `Extent1`.`Timestamp` >= (AddHours(`Limit1`.`Timestamp`, -(@p__linq__0))) 

сталкиваюсь сообщение об ошибке

Failed in 6 ms with error: FUNCTION mydb.AddHours does not exist 

И действительно, я не получил, что на стороне БД. Кто-нибудь знает, как работают эти DbFunctions?

UPD

Похожие вопросы

EntityFramework 6.1.3 and MySQL DbFunctions.TruncateTime does not exist?

how to use canonical functions in Entity Framework and Mysql

ответ

0

Обойти сейчас - только что добавили реализацию функции в DbInitializer

CREATE FUNCTION AddHours(timeValue datetime, addValue int) RETURNS datetime 
     RETURN DATE_ADD(timeValue, INTERVAL addValue HOUR); 
0

Вы пытаетесь вызвать хранимую функцию вашей базы данных, но этого не существует. Решение состоит в том, чтобы правильно создать функцию db . Более подробную информацию можно найти here.

+0

Это то, что я на самом деле сделал, но почему ничего не сказано о том, что я должен был создать функцию вручную, прежде чем использовать ее с помощью DbFunctions? Я предположил, что он создается на лету, а EF генерирует SQL-запрос. –

+0

@JohnSmith не создается EF. Это будет включать в себя код, определяющий, каково ваше намерение. В этот момент это невозможно, поэтому исключение из среды выполнения. EF загружает объекты, созданные на основе существующих сущностей, и ваш запрос не будет генерировать их. –

Смежные вопросы