代码之家  ›  专栏  ›  技术社区  ›  Carvellis

在VisualStudio2010中,Entity Framework 4将DateTimeOffset映射到SQL datetime

  •  4
  • Carvellis  · 技术社区  · 15 年前

    我使用visualstudio2010rtm和.NET/entityframework4rtm,并采用模型驱动的设计方法。 当我创建一个带有DateTimeOffset字段的实体时,EF modeler尝试将DateTimeOffset映射到SQL datetime而不是SQL DateTimeOffset。

    Visual Studio出现以下错误:

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

    如果直接在EDMX StorageModels xml部分编辑类型,则会出现以下错误:

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

    当我还在使用VisualStudio2010的测试版时,这个问题也发生了。NET框架4。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Craig Stuntz    15 年前

    试着换个方向(DB->型号)。 It worked for Julie Lerman . 在我看来,如果您符合 DateTimeOffset

        2
  •  5
  •   bkaid    14 年前

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

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

    这对于告诉实体框架代码在生成数据库时首先使用datetime2而不是datetime也很有用。

        3
  •  1
  •   denstorti    14 年前

    解决方案是在脚本sql中手动更改并生成DB之后,从DB更新一次。在我检查了表映射之后,数据类型被修改为DATE而不是DATETIME。如果你想改成DATETIME2,我想也可以这样。