¡Ajá! ¡Mi increíble colega tuvo una idea y funcionó!
En nuestro código EF intentamos poner
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
Y luego el DateTime.Now
con milisegundos se almacenó en la base de datos
Actualización:vale la pena mencionar cómo me metí en esta situación
Construcción de la base de datos con Model First en una aplicación de "prueba"
- Mi aplicación tiene que funcionar tanto con SQL Server como con Oracle. Entonces...
- Empecé diseñando mi base de datos en un diagrama EDMX
- Una vez hecho el diagrama, generé el DDL para SQL Server.
-
Por alguna razón, el proveedor de Oracle EF no pudo generar el DDL, así que procedí a realizar cambios manualmente en el DDL de SQL Server para que fuera correcto sintácticamente
Primer problema - mi Oracle DDL estaba usando una fecha en lugar de una marca de tiempo. ¡Asegúrate de usar la marca de tiempo! DateTime en Oracle no almacena milisegundos.
Uso de Code First de la base de datos para la solución real
- Quería que la aplicación usara el enfoque Code First (solo mi preferencia. Creo que es más fácil de mantener)
- Así que me conecté a la base de datos de SQL Server y generé todas mis clases a partir de ese esquema.
- Pasé todas las pruebas de mi unidad y luego decidí probarlo con la base de datos de Oracle
- Incluso después de cambiar de DATE a Timestamp, seguía teniendo problemas con los milisegundos.
- Generé otro modelo de Code First en una solución de prueba de Visual Studio con un
TIMESTAMP(6)
escriba en Oracle, excepto cuando miré elOnModelCreating
código, no generó nada conHasPrecision(6)
ni hubo decoradores en la propiedad en la clase C# POCO generada. - Noté si tienes el
HasPrecision(6)
código en suOnModelCreating
, el código primeroCreateDatabase()
en realidad hará un OracleTIMESTAMP(6)
. Si no lo hace, el proveedor de Oracle EF utilizaráDATE
Creo que si utiliza el enfoque Model First, puede establecer valores de precisión en el diagrama EDMX, pero he oído que es una mala práctica.