Ah ! Mon super collègue a eu une idée et ça a marché !
Dans notre code EF, nous avons essayé de mettre
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().Property(p => p.TIMESTAMP).HasPrecision(6);
}
Et puis le DateTime.Now
avec des millisecondes stockées dans la base de données
Mise à jour :il convient de mentionner comment je me suis retrouvé dans cette situation difficile
Construire la base de données avec Model First dans une application "test"
- Mon application doit fonctionner avec SQL Server et Oracle. Alors...
- J'ai commencé par concevoir ma base de données dans un diagramme EDMX
- Une fois le diagramme terminé, j'ai généré le DDL pour SQL Server.
-
Pour une raison quelconque, le fournisseur Oracle EF n'a pas pu générer le DDL, j'ai donc apporté manuellement des modifications au DDL SQL Server afin qu'il soit correct d'un point de vue syntaxique
1er problème - mon Oracle DDL utilisait une date au lieu d'un horodatage. Assurez-vous d'utiliser l'horodatage !!! DateTime dans Oracle ne stocke pas les millisecondes.
Utilisation de Code First à partir de la base de données pour la solution réelle
- Je voulais que l'application utilise l'approche Code First (juste ma préférence. Je pense que c'est plus facile à maintenir)
- Je me suis donc connecté à la base de données SQL Server et j'ai généré toutes mes classes à partir de ce schéma.
- J'ai réussi tous mes tests unitaires, puis j'ai décidé de le tester avec la base de données Oracle
- Même après être passé de DATE à Horodatage, j'avais toujours des problèmes avec les millisecondes entrantes.
- J'ai généré un autre modèle Code First dans une solution de studio visuel de test avec un
TIMESTAMP(6)
tapez dans Oracle, sauf quand j'ai regardé leOnModelCreating
code, il n'a rien généré avecHasPrecision(6)
il n'y avait pas non plus de décorateurs sur la propriété dans la classe C# POCO générée. - J'ai remarqué si vous avez le
HasPrecision(6)
code dans votreOnModelCreating
, le code d'abordCreateDatabase()
créera en fait un OracleTIMESTAMP(6)
. Si vous ne le faites pas, le fournisseur Oracle EF utiliseraDATE
Je pense que si vous adoptez l'approche Model First, vous pouvez définir des valeurs de précision dans le diagramme EDMX, mais j'ai entendu dire que c'était une mauvaise pratique.