たぶんこれは古いスレッドですが、他の人のためにこれに関する私の調査結果を投稿します:
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; }
}
このようなカスタム マッピングを使用すると、次のようになります。
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();
}
これはthisを生成します。これは、オーバーフロー例外が発生することを意味します。
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");
このエラーが発生します。SQL Server Standart 2012 に切り替えると、問題が解決するようです (これは確かな解決策ではありません - 実験のためだけです)。作成した SQL Server スキーマはこれです。
私は Sql の専門家ではありませんが、SQL CE はこれらの日付をサポートしていないようです。開発環境の問題。残ります。DateTime は代用できますが、あちこちで多くのリファクタリングを行うことができます。
また、SqlDateTime と DateTime は大きく異なることにも注意してください。
コードとプロジェクトのライフサイクルにとって良いと思う解決策は、上記のstackoverflowのリンクの1つとカスタムfluentApiマッピング設定を組み合わせて提案されているように、LocalDbとSQL標準を切り替えて、モデルの作成を均等にすることです。
セーフティ ネットとしてEF にカスタム コンベンションを導入することも良さそうです。
コードと開発運用の両方について、より優れたオールラウンドなソリューションを誰かが持っている場合は、投稿してください。