2015-05-14 3 views
8

verwenden Ich möchte Timespan zu DateTime in EntityFramework mit MySql-Datenbank hinzufügen.wie kanonische Funktionen in Entity Framework und Mysql

ich versucht habe mit DbFunctions.AddMinutes(someminutes) und EntityFunctions.AddMinutes(someminutes) aber wenn ich i Ausnahme etwas ausführen bekommen wie

FUNCTION projectName.AddMinutes nicht

i gegoogelt haben existiert aber nicht finden können, wie kanonische Funktion auszuführen . obwohl es eine Liste der Funktion aber wieder ich weiß nicht, welche Klasse sie gehören https://msdn.microsoft.com/en-us/library/bb738563.aspx

Ich bin mit

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

Mein Linq Abfrage ist als unten

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

die Straße hinunter, wo einige Zustand und Paginierung

angewendet wird
+0

haben Sie System.Data.Entity Namespace usings hinzugefügt? –

+0

@AdilMammadov ja es ist schon da. –

Antwort

1

Eigentlich falsch verstanden ich den Fehler es ist nicht

FUNCTION projectName.AddMinutes nicht

aber

FUNCTION databaseName.AddMinutes existiert nicht existiert

Ich weiß nicht, was das Problem ist. Habe ich einen nicht kompatiblen Treiber/Stecker, weiß ich nicht.

Um dieses Problem zu lösen, habe ich gerade eine Funktion mit dem Namen AddMinutes erstellt, die intern die Funktion DATE_ADD() aufruft. Funktionsdefinition ist als unten

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

Ich verstehe, dass dies nicht die richtige Lösung ist, sondern ein HACK

0

AddMinutes Methode Teil der Datetime-Klasse ist, so dass Sie auf die Instanz von Datetime-Klasse also können

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

DbFunctions.AddMinutes (Ausdruck, Zahl) ist diese Funktion nur innerhalb einer LINQ to Entities-Abfrage (https://msdn.microsoft.com/en-us/library/dn220081(v=vs.113).aspx) erscheinen:

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

aktualisierte Frage für bessere undersanding –

+0

Sind Sie sicher, dass Ihr Treiber für mysql kanonische Funktionen unterstützt? – PatBusz

+0

Wie kann ich überprüfen, ob der Treiber kanonische Funktionen unterstützt oder nicht? –