Peut-être que c'est un vieux fil, mais je affichera mes conclusions sur ce point pour les autres:
Disons que nous avons dev env: EF 5, CodeFirst, SQLCE 4.0:
public abstract class Entity : IEntity, IEquatable<Entity>
{
public virtual int Id { get; protected set; }
public virtual DateTime LastModified { get; set; }
[DataType(DataType.Date)]
public virtual DateTime CreatedOn { get; set; }
[DataType(DataType.DateTime)]
public virtual DateTime CreatedOn2 { get; set; }
[DataType(DataType.Time)]
public virtual DateTime CreatedOn3 { get; set; }
public virtual DateTime CreatedOn4 { get; set; }
}
wi e un mappage personnalisé:
public EntityMapping()
{
HasKey(e => e.Id);
Property(e => e.Id);
Property(e => e.LastModified).IsRequired().IsConcurrencyToken();
Property(e => e.CreatedOn).IsRequired();
Property(e => e.CreatedOn2).IsRequired();
Property(e => e.CreatedOn3).IsRequired();
Property(e => e.CreatedOn4).IsRequired();
}
Ce produit this, ce qui signifie que nous aurons l'exception de débordement.
Modification des correspondances à ce tout en travaillant avec SQL CE 4.0:
Property(e => e.CreatedOn).IsRequired().HasColumnType("datetime2");
Property(e => e.CreatedOn2).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn3).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn4).IsRequired().HasColumnType("datetime2");
donne cette error. Passer à SQL Server Standart 2012 semble résoudre le problème (ce n'est pas une solution à coup sûr - juste pour l'expérience). Le schéma SQL Server créé est this.
Je ne suis pas un expert en Sql mais il me semble que SQL CE does not support these dates. le problème avec le développement env. restes. DateTime peut être substitué, mais peut apporter beaucoup de refactoring ici et là.
Rappelez-vous également que SqlDateTime and DateTime are very different. La solution que je trouve bonne - pour le code et pour le cycle de vie du projet - est de basculer entre LocalDb et SQL standart comme suggéré par l'un des liens ci-dessus de stackoverflow combiné avec les paramètres de mappage fluentApi pour égaliser la création du modèle ou les deux .
L'introduction du custom convention in EF en tant que filet de sécurité semble également très bien.
Si quelqu'un a une meilleure solution globale, pour le code et pour la production de dev, à la fois, postez-le.