最终编辑/ TLDR
事实上,这个问题与EF无关,而是 Server:我在这台特定的机器上运行了3个版本:2005 (不知道从哪里!)、2008和2012。
由于一个未知的原因,2005版本被用作默认版本。
因此,我已经卸载并重新安装了2012年版本,强制使用正确的默认名称("SQLEXPRESS").
从那时起,我可以强制将DateTime映射到DateTime2,而不存在任何问题。
我看到了一些代码示例,它们使用:
[Column(TypeName = "DateTime2")]将.Net DateTime映射到 Server DateTime2。
但是,以最新的EF 6.1.1,这似乎是坏的。
我调试了源代码,发现DateTime2实际上不在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发布于 2014-07-14 18:02:30
如果您运行Server 2008及更高版本,实体框架将完全支持Datetime2,但不支持Server 2005!
https://stackoverflow.com/questions/24726859
复制相似问题