Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Data e hora do Oracle EF6


Eu tive um problema semelhante com o tipo DATE Oracle e EF6.1. Minha solução foi usar o CodeFirstFunctions library (disponível apenas para EF6.1 e posterior) e especifique uma função de conversão primeiro no 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;

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

Então, posso forçar o Entity Framework a usar o tipo DATE em uma condição where:
var measurement = 
  context.Measurements
    .Where(m => m.MeasuredAt == 
          PlantContext.ToDateLocal("2016.01.01 10:00:00", "YYYY.MM.DD Hh24:MI:SS"))
    .FirstOrDefault();

Tenha cuidado ao usar letras maiúsculas para o nome da função e para o nome do esquema com CodeFirstFunctions se você usar Oracle.

Se precisar de mais detalhes, escrevi um postagem do blog sobre isso com um projeto de exemplo.