4

我将 Visual Studio 2010 RTM 与 .NET/Entity Framework 4 RTM 与模型驱动的设计方法一起使用。当我使用 DateTimeOffset 字段创建实体时,EF 建模器尝试将 DateTimeOffset 映射到 SQL 日期时间而不是 SQL 日期时间偏移。我使用的是 SQL Server 2008 Express,因此数据库支持 datetimeoffset。

Visual Studio 出现此错误:

错误 2019:指定的成员映射无效。类型“Data.SqlStorage.MyType”中成员“Created”的类型“Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]”与“SqlServer.datetime[Nullable=False,DefaultValue=,Precision=] 不兼容3] 'Data.SqlStorage.Store.MyTypes 类型的成员'Created'

如果我直接在 EDMX StorageModels xml 部分中编辑类型,则会收到以下错误:

错误 40:类型 datetimeoffset 未使用命名空间或别名进行限定。只有 PrimitiveTypes 可以在没有限定的情况下使用。

为什么建模器不能正确地将其映射到 SQL datetimeoffset 类型?当我仍在使用 Visual Studio 2010 和 .NET Framework 4 的 beta 版本时,也出现了这个问题。

4

3 回答 3

5

在 RTM 版本中,您可以在 DbContext 中执行以下操作:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) {
     modelBuilder.Entity<EntityName>().Property(p => p.PropertyName).HasColumnType("datetimeoffset");
 }

这对于告诉 Entity Framework Code First 在生成数据库时使用 datetime2 而不是 datetime 也很有用。

于 2011-04-24T06:54:27.183 回答
1

尝试另一种方式(DB-> 模型)。它为朱莉勒曼工作。在我看来,如果您使用命名空间限定,您手动编辑的 EDMX 也应该可以工作DateTimeOffset

于 2010-04-15T12:55:20.793 回答
1

解决方案是从数据库更新一次,在您手动更改脚本 sql 并生成数据库之后。我做到了,在我检查了我的表映射并将数据类型修改为 DATE 而不是 DATETIME 之后。如果您想更改为 DATETIME2,我认为同样可以应用。

于 2011-01-16T20:19:41.447 回答