DateTimeのEntity Framework標準はDateTime2フィールドであるため、過去にこの問題が発生しました。明らかに回避策は、SQL Serverデータベースのすべての列をdatetime2に更新することですが、datetime2データ型はSQL Server 2008でのみ導入されたため、ここで試してみるべきことがいくつかあります:
最初に: SQL データベースの DateTime フィールドが nullableである場合、モデルが "DateTime?" を使用していることを確認してください。(nullable datetime) "DateTime" の代わりに。
次に、任意の XML エディターで EDMX ファイルを開き (Visual Studio が動作するはずです)、値を に変更します。これProviderManifestTokenによりProviderManifestToken="2005"、SQL Server 2005 との互換性が確保されます。
これは .edmx ファイルでは機能しますが、Code First での変更は少し難しく、Entity Framework のバージョンによって異なります。Microsoft では、次の例のように、OnModelCreating メソッドで列の型を指定することをお勧めします。
modelBuilder.Entity<Blog>().Property(t => t.CreatedOn).HasColumnName("CreatedOn").HasColumnType("date");
目的に達するまで、ColumnType の値を試してみてください。
それでも値を変更したいProviderManifestToken場合:
EF 6: DbContext の構成を作成できます。基本的には次のようなクラスです。
/// <summary>
/// A configuration class for SQL Server that specifies SQL 2005 compatability.
/// </summary>
internal sealed class EntityFrameworkDbConfiguration : DbConfiguration
{
/// <summary>
/// The provider manifest token to use for SQL Server.
/// </summary>
private const string SqlServerManifestToken = @"2005";
/// <summary>
/// Initializes a new instance of the <see cref="EntityFrameworkDbConfiguration"/> class.
/// </summary>
public EntityFrameworkDbConfiguration()
{
this.AddDependencyResolver(new SingletonDependencyResolver<IManifestTokenResolver>(new ManifestTokenService()));
}
/// <inheritdoc />
private sealed class ManifestTokenService : IManifestTokenResolver
{
/// <summary>
/// The default token resolver.
/// </summary>
private static readonly IManifestTokenResolver DefaultManifestTokenResolver = new DefaultManifestTokenResolver();
/// <inheritdoc />
public string ResolveManifestToken(DbConnection connection)
{
if (connection is SqlConnection)
{
return SqlServerManifestToken;
}
return DefaultManifestTokenResolver.ResolveManifestToken(connection);
}
}
}
使用法:
DbConfigurationType(typeof(EntityFrameworkDbConfiguration))]
public class MyContextContext : DbContext
{
}
(ソース: EF Code First の ProviderManifestToken を構成する方法)
EF 5 以前: 簡単に説明されているこの投稿を読んでください: http://blog.oneunicorn.com/2012/04/21/code-first-building-blocks/
それが役立つことを願っています。