Ah! Il mio fantastico collega ha avuto un'idea e ha funzionato!
Nel nostro codice EF abbiamo provato a inserire
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
E poi DateTime.Now
con millisecondi è stato memorizzato nel database
Aggiornamento:vale la pena ricordare come sono finito in questa situazione
Costruzione del database con Model First in un'applicazione di "test"
- La mia app deve funzionare sia con SQL Server che con Oracle. Allora...
- Ho iniziato progettando il mio database in un diagramma EDMX
- Una volta terminato il diagramma, ho generato il DDL per SQL Server.
-
Per qualche motivo il provider Oracle EF non è stato in grado di generare il DDL, quindi ho provveduto ad apportare manualmente le modifiche al DDL di SQL Server in modo che fosse sintatticamente corretto
1° problema - il mio Oracle DDL utilizzava una data anziché un timestamp. Assicurati di utilizzare Timestamp!!! DateTime in Oracle non memorizza i millisecondi.
Utilizzo di Code First dal database per la soluzione effettiva
- Volevo che l'app utilizzasse l'approccio Code First (solo una mia preferenza. Penso che sia più facile da mantenere)
- Quindi mi sono connesso al database di SQL Server e ho generato tutte le mie classi da quello schema.
- Ho superato tutti i miei unit test e poi ho deciso di testarlo con il database Oracle
- Anche dopo essere passato da DATE a Timestamp, continuavo ad avere problemi con i millisecondi in entrata.
- Ho generato un altro modello Code First in una soluzione di Visual Studio di prova con un
TIMESTAMP(6)
digita Oracle, tranne quando ho esaminatoOnModelCreating
codice, non ha generato nulla conHasPrecision(6)
né c'erano decoratori sulla proprietà nella classe C# POCO generata. - Ho notato se hai
HasPrecision(6)
codice nel tuoOnModelCreating
, il codice primaCreateDatabase()
creerà effettivamente un OracleTIMESTAMP(6)
. In caso contrario, il provider Oracle EF utilizzeràDATE
Penso che se utilizzi l'approccio Model First puoi impostare valori di precisione nel diagramma EDMX, ma ho sentito che è una cattiva pratica.