DateTime2不再受支持了吗?

时间:2014-07-13 20:41:37

标签: .net entity-framework entity-framework-6

最终编辑/ TLDR

确实问题与EF无关,但 SQL Server :我在这台特定机器上运行了3个版本: 2005 (不知道从哪里来!), 2008 2012

由于未知原因, 2005 版本被用作默认版本。

因此我已将其卸载并重新安装2012版本,强制使用正确的默认名称(" SQLEXPRESS" )。

从那时起,我可以强制DateTime映射到DateTime2而不会出现任何问题。


我看过一些代码示例使用:

[Column(TypeName = "DateTime2")]

将.Net DateTime映射到 SQL Server DateTime2

但是最新的EF 6.1.1似乎已经破了。

我调试了源代码,发现确实DateTime2不在SQL Server支持的类型列表中!

这是一个简单的复制品:

class BrokenDateTime2
{
    public long Id { get; set; }

    [Column(TypeName = "DateTime2")]
    public DateTime DateTime2 { get; set; }
}

class Context : DbContext
{
    public DbSet<BrokenDateTime2> BrokenDateTime2 { get; set; }
}

...

using (Context context = new Context())
{
    context.Database.Initialize(true);
}

我错过了什么?

编辑:更多代码

爆炸:

public static PrimitiveType GetStoreTypeFromName(this DbProviderManifest providerManifest, string name)
{
    ...
    return providerManifest.GetStoreTypes()
                           .Single(p => string.Equals(p.Name, name, StringComparison.OrdinalIgnoreCase));
}

确实当我看providerManifest.GetStoreTypes()时,我看不到任何符合DateTime2的内容。

例外是:

InvalidOperationException: Sequence contains no matching element

1 个答案:

答案 0 :(得分:1)

如果运行SQL Server 2008及更高版本,则实体框架完全支持Datetime2,而不是SQL Server 2005!