sql >> Database >  >> RDS >> Oracle

EF6 Oracle Tijdstempel &Datum

Ik heb een soortgelijk probleem gehad met het DATE Oracle-type en EF6.1. Mijn tijdelijke oplossing was om de CodeFirstFunctions bibliotheek (alleen beschikbaar voor EF6.1 en later) en specificeer eerst een conversiefunctie in 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;

En later in mijn DbContext:

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

Dus ik kan Entity Framework dwingen om het DATE-type te gebruiken in een waar-voorwaarde:

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

Zorg ervoor dat u hoofdletters gebruikt voor de functienaam en voor de schemanaam met CodeFirstFunctions als u Oracle gebruikt.

Als je meer details nodig hebt, heb ik een blogpost hierover met een voorbeeldproject.




  1. Over mysql-cursor en iterator

  2. SQL-prestaties:WHERE versus WHERE(ROW_NUMBER)

  3. Aanmeldingstriggers in SQL Server

  4. Kan database niet gebruiken in mysql (onbekende database)