sql >> Databáze >  >> RDS >> Oracle

EF6 Oracle TimeStamp &Date

Měl jsem podobný problém s typem DATE Oracle a EF6.1. Mým řešením bylo použít CodeFirstFunctions knihovna (dostupná pouze pro EF6.1 a novější) a nejprve zadejte konverzní funkci v 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;

A později v mém DbContext:

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

Mohu tedy donutit Entity Framework použít typ DATE v podmínce where:

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

Pokud používáte Oracle, dávejte pozor, abyste pro název funkce a název schématu s CodeFirstFunctions používali velká písmena.

Pokud potřebujete další podrobnosti, napsal jsem příspěvek na blogu o tom s příkladem projektu.




  1. Nová funkce Oracle 18c:Online úprava dělení

  2. ZOBRAZIT VŠE Data mezi dvěma daty; pokud pro konkrétní datum neexistuje žádný řádek, zobrazte ve všech sloupcích nulu

  3. Uložte řetězec se speciálními znaky, jako jsou uvozovky nebo zpětné lomítko, v tabulce postgresql

  4. PHP MySQL Vyberte ID z jedné tabulky a informace z jiné tabulky