Oracle
 sql >> Base de données >  >> RDS >> Oracle

Horodatage et date Oracle EF6

J'ai eu un problème similaire avec le type DATE Oracle et EF6.1.Ma solution de contournement consistait à utiliser le CodeFirstFunctions bibliothèque (disponible uniquement pour EF6.1 et versions ultérieures) et spécifiez d'abord une fonction de conversion dans Oracle :

create or replace FUNCTION TO_DATE_LOCAL 
(
  DATETIMETOCONVERT IN VARCHAR2 
, CONVERTFORMAT IN VARCHAR2 
) RETURN DATE AS 
BEGIN
  RETURN to_date(DATETIMETOCONVERT, CONVERTFORMAT);
END TO_DATE_LOCAL;

Et plus tard dans mon DbContext :

[DbFunction("CodeFirstDatabaseSchema", "TO_DATE_LOCAL")]
public static DateTime ToDateLocal(string dateTimeToConvert, string convertFormat)
{
    // no need to provide an implementation
    throw new NotSupportedException();
}

Je peux donc forcer Entity Framework à utiliser le type DATE dans une condition where :

var measurement = 
  context.Measurements
    .Where(m => m.MeasuredAt == 
          PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
    .FirstOrDefault();

Veillez à utiliser des majuscules pour le nom de la fonction et pour le nom du schéma avec CodeFirstFunctions si vous utilisez Oracle.

Si vous avez besoin de plus de détails, j'ai écrit un article de blog à ce sujet avec un exemple de projet.