Entity Framework 和默认日期

7

我在SQL中有一张表,其中有一个DateTime列,默认值为GetDate()。

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

该列也不允许为空,当前它传递了一个日期值1/1/0001,我收到一个错误:

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

谢谢!


1
请问您能分享一下您的代码吗? - spajce
您必须避免EF将日期发送到数据库,以免覆盖DB中的GetDate()值。搜索 DatabaseGeneratedStoreGeneratedPattern(取决于您使用的EF版本) 和 Computed,以找到正确方向的指示。 - Slauma
3个回答

22
  1. 打开 edmx 设计器
  2. 选择你的日期时间列
  3. 转到属性并将 StoreGeneratedPatternNone 更改为 Computed

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


3
为什么 EF 默认不提供此功能?在以数据库为中心的场景下,当重新创建模型时,很难进行维护。 - T.Y. Kucuk

3
如果您正在使用Fluent API,只需将以下内容添加到您的DbContext类中:
        modelBuilder.Entity<EntityName>()
            .Property(p => p.PropertyName)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接