c# - EF 7 为 DateTime 列设置初始默认值

标签 c# entity-framework-core

我需要能够设置 DateTime 列的初始值。

当我指定“getutcdate() 或 DateTime.UtcNow 时

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

然后运行 ​​dnx 。 ef migration add InitialMigration EF 生成迁移快照:

b.Property<DateTime?>("ShipDate")
  .Required()
  .Annotation("Relational:ColumnDefaultValue", "getutcdate()")
  .Annotation("Relational:ColumnDefaultValueType", "System.String");

当我使用 DateTime.UtcNow 时...

b.Property<DateTime?>("ShipDate")
  .Annotation("Relational:ColumnDefaultValue", "635754129448768827")
  .Annotation("Relational:ColumnDefaultValueType", "System.DateTime");

和初始迁移:

ShipDate = table.Column(
  type: "datetime2", 
  nullable: false, 
  defaultValue: "getutcdate()"),

当我使用 DateTime.UtcNow 时...

ShipDate = table.Column(
  type: "datetime2", 
  nullable: true, 
  defaultValue: new DateTime(2015, 8, 17, 12, 55, 44, 876, DateTimeKind.Unspecified)),

它似乎必须工作,但是当我将数据插入表中时,该列的默认值是创建时间戳的“即时”。

我错过了什么吗?

同样,如何在 EF7 中指定 IDENTITY SEED?

谢谢

更新 生成 sql 脚本后,我得到了两个选项:

如果使用“getutcdate()”:

[ShipDate] datetime2 DEFAULT 'getutcdate()',

因为引号而不起作用

或者如果使用 DateTime.utcNow:

[ShipDate] datetime2 DEFAULT '2015-08-17 12:55:44.8760000'

这解释了我得到的静态值。

我想我可以应付这个。 这是错误还是有正确的方法? 谢谢

最佳答案

你想设置SQL的默认值,而不是常量值:

entity.Property(e => e.ShipDate).HasDefaultValueSql("getutcdate()");

关于c# - EF 7 为 DateTime 列设置初始默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049742/

相关文章:

c# - 仅在浏览器关闭时结束 session

c# - System.Web.Caching.Cache 是否有望在沙箱中工作?

c# - 我如何知道一个类是否是非托管资源的包装器

c# - 如何在它调用的 asmx 中获取对 Page 对象的引用

.net - EDMX在哪里

c# - WPF 用户控件 : list box item not shown in WPF application

postgresql - .NET Core 2.1 Npgsql.EntityFrameworkCore.PostgreSQL 代码优先

c# - 具有多线程访问的SQLitePCLRaw.provider.e_sqlite3.dll中的System.AccessViolationException或System.ExecutionEngineException崩溃

c# - EF Core 是否支持通用的抽象基础实体?

entity-framework - 限制 Entity Framework 对象的集合大小