【问题标题】:Correct way to use default DateTime in ASP.NET MVC 5在 ASP.NET MVC 5 中使用默认 DateTime 的正确方法
【发布时间】:2017-04-14 17:26:52
【问题描述】:

我有一个 SQL Server 数据库。我的一张表有一个 SQL DATETIME 列。创建记录时不必输入此列,但以后应修改。

我了解DateTime 不可为空。 datetime2 的默认值为 1/1/0001,而 SQL Server 的最小值为 1/1/1753。

Why when I insert a DateTime null I have "0001-01-01" in SQL Server?

那么,我的问题是正确的方法是什么?如何将po.PODate 设置为 SQL Server (1/1/1753) 的最小值。

ApplicationDbContext db = new ApplicationDbContext();

PurchaseOrder po = new PurchaseOrder();
po.PODate = new DateTime(1753, 1, 1);    // Best way?
// po.PODate = DateTime.MinValue;  Doesn't work because DateTime.MinValue is 1/1/0001
// po.PODate = null;               Doesn't work because DateTime is non-nullable value type
// po.PODate = DBNull.value;       Doesn't work because it is for type System.DBNull not DateTime

db.PurchaseOrders.Add(po);
db.SaveChanges();

【问题讨论】:

  • 创建记录时为什么不使用DateTime.Now
  • 我不希望 PODate 的默认值是当前时间,我希望它是一些不应该发生的“荒谬”的 DateTime。稍后,时间将更改为实际的 DateTime。
  • 然后只需修改您的属性以接受空值。 DateTime PODate { get; set; }DateTime? PODate { get; set; }。提供虚假(或荒谬)数据并不是最佳做法。如果您不需要数据,请将其设置为 NULL 并稍后更新其值。
  • DATETIME in SQL Server is 可以为空 - 完全没有问题。 DATETIME2(n) 的日期范围为 0001 到 9999 - 1753 年 1 月 1 日适用于 DATETIME(这是应该开始逐步淘汰该类型并使用 @ 的原因之一987654334@ 代替)

标签: asp.net asp.net-mvc


【解决方案1】:

如果您希望日期不可为空,那么是的,您所拥有的就是最好的方法。无论如何,EF 将始终向该字段传递一个值,因此,如果您不这样做,它将尝试传递 1/1/0001 和错误。

您可以创建一个静态类,而不是每次都定义它:

public static DateTime MinDate()
{
   return new DateTime(1753, 1, 1);
}

如果你想标准化它。

另一个选项是使列可以为空,并且无论何时查询日期,当为空时让 SQL 返回 1/1/1753。

【讨论】:

  • 嗯,我只在一个地方使用它,所以我认为创建静态类不值得。但是,是的,如果我要在很多地方使用它,那就是我一直在寻找的东西。对于可以为空的东西,我确实尝试覆盖 IdentityModel.ApplicationDbContext 中的 OnModelCreating 方法(但它没有做任何事情),如下所示:`modelBuilder.Entity().Property(m => m.PODate).IsOptional( ); base.OnModelCreating(modelBuilder);`
  • 如果你正在尝试可以为空的东西;那么您可以将类型更改为“日期时间?”。如果是 DateTime,我不知道 IsOptional() 会有所帮助,但可能您可以使用它来将其设置为 1753 年 1 月 1 日?
猜你喜欢
  • 2012-03-08
  • 2017-06-16
  • 2017-10-10
  • 2010-10-30
  • 1970-01-01
  • 2023-03-30
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多