【问题标题】:Entity Framework and Default Date实体框架和默认日期
【发布时间】:2013-02-06 12:17:19
【问题描述】:

我在 SQL 中有一个表,在该表中我有一个默认值为 GetDate() 的 DateTime 列

在实体框架中,我希望它使用 SQL 日期时间,而不是使用运行控制台应用程序的计算机的本地日期时间(SQL 服务器落后 1 小时)。

该列也不允许空值,目前它传入的日期值是 1/1/0001,我得到一个错误:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。\r\n语句已终止。

谢谢!

【问题讨论】:

  • 你能分享你的代码吗?
  • 您必须避免 EF 将日期发送到数据库,以避免数据库中的 GetDate() 值被覆盖。搜索 DatabaseGeneratedStoreGeneratedPattern(取决于您使用的 EF 版本)和 Computed 以找到正确方向的指示。

标签: entity-framework


【解决方案1】:
  1. 打开edmx设计器
  2. 选择您的 DateTime 列
  3. 转到属性并将StoreGeneratedPatternNone 更改为Computed

这将告诉 EF 不要为该列插入值,因此该列将获得数据库生成的默认值。请记住,您将无法传递某些值。

【讨论】:

  • 为什么 EF 默认不提供这个功能?在 Database-First 场景中重新创建模型时很难维护。
【解决方案2】:

如果您使用 Fluent API,只需将其添加到您的 DbContext 类中:

        modelBuilder.Entity<EntityName>()
            .Property(p => p.PropertyName)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

【讨论】:

    【解决方案3】:

    在 OnModelCreating 方法中为该实体设置 columnType: modelBuilder.Entity().Property(s => s.ColumnName).HasColumnType("datetime2");

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多