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

O provedor do Oracle Entity Framework não armazena DateTime.Now com milissegundos


Ah! Meu colega incrível teve uma ideia e funcionou!

Em nosso código EF, tentamos colocar
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}

E então o DateTime.Now com milissegundos foi armazenado no banco de dados

Atualização - vale a pena mencionar como cheguei nessa situação

Construindo o banco de dados com o Model First em um aplicativo de "teste"

  1. Meu aplicativo precisa funcionar com SQL Server e Oracle. Então...
  2. Comecei projetando meu banco de dados em um diagrama EDMX
  3. Depois que o diagrama foi feito, gerei o DDL para SQL Server.

  4. Por algum motivo, o provedor Oracle EF não conseguiu gerar o DDL, então continuei a fazer alterações manualmente no DDL do SQL Server para que ele ficasse sintaticamente correto

    1º problema - meu Oracle DDL estava usando uma data em vez de timestamp. Certifique-se de usar Timestamp!!! DateTime no Oracle não armazena milissegundos.

Usando Code First do banco de dados para a solução real

  1. Eu queria que o aplicativo usasse a abordagem Code First (Apenas minha preferência. Acho que é mais fácil de manter)
  2. Conectei-me ao banco de dados SQL Server e gerei todas as minhas classes a partir desse esquema.
  3. Todos os meus testes de unidade foram aprovados e decidi testá-los com o banco de dados Oracle
  4. Mesmo depois de mudar de DATE para Timestamp, ainda estava tendo problemas com os milissegundos.
  5. Gerei outro modelo Code First em uma solução de estúdio visual de teste com um TIMESTAMP(6) digite no Oracle, exceto quando olhei para o OnModelCreating código, não gerou nada com HasPrecision(6) nem havia decoradores na propriedade na classe C# POCO gerada.
  6. Percebi se você tem o HasPrecision(6) código em seu OnModelCreating , o Code FirstCreateDatabase() irá realmente fazer um Oracle TIMESTAMP(6) . Caso contrário, o provedor Oracle EF usará DATE

Acho que se você fizer a abordagem Model First, poderá definir valores de precisão no diagrama EDMX, mas ouvi dizer que é uma prática ruim.