2015-05-14 15 views
8

Desidero aggiungere Tempo a DateTime in EntityFramework con Database MySql.come utilizzare le funzioni canoniche in Entity Framework e Mysql

Ho provato con DbFunctions.AddMinutes(someminutes) e EntityFunctions.AddMinutes(someminutes) ma quando eseguo ottengo eccezione qualcosa come

projectName.AddMinutes funzione non esiste

Googled ma non riesco a trovare il modo di eseguire la funzione canonica . anche se c'è un elenco di funzioni, ma ancora una volta non so quale classe appartengono https://msdn.microsoft.com/en-us/library/bb738563.aspx

Sto usando

  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 (Database) 5.6.17

mio LINQ Query è come sotto

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 }); 

lungo la strada dove alcuni condizioni e impaginazione viene applicato

+0

avere aggiunto System.Data.Entity namespace usings? –

+0

@AdilMammadov si è già lì. –

risposta

1

realtà ho ignorato l'errore non

projectName.AddMinutes funzione è non esiste

ma

databaseName.AddMinutes funzione non esiste

Non so quale sia il problema. Ho qualche driver/connettore non compatibile, non lo so.

Per risolvere questo problema ho appena creato la funzione con il nome AddMinutes, chiama internamente la funzione DATE_ADD(). definizione di funzione è come sotto

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

ho capito che questa non è una soluzione adeguata, ma un hack

0

metodo AddMinutes fa parte della classe DateTime, in modo da poter utilizzare per un'istanza di DateTime Classe IE

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

DbFunctions.AddMinutes (espressione, numero) questa funzione può comparire solo all'interno di una query 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) 
+0

domanda aggiornata per un migliore inseguimento –

+0

Sei sicuro che il tuo driver per mysql supporti le funzioni canoniche? – PatBusz

+0

come posso verificare che il driver supporti le funzioni canoniche o no? –

Problemi correlati