【问题标题】:How to add time part in database (sqlserver) asp.net core如何在数据库(sqlserver)asp.net核心中添加时间部分
【发布时间】:2023-04-05 14:35:01
【问题描述】:

在一个 asp.net 核心 MVC 应用程序中,我们得到了一个 DateTime 字段 LastUpdated。在 sqlserver 中,字段的类型是日期时间。如果我们在数据库中设置时间(和日期),信息会正确显示,但在更新后,时间部分总是设置为零。代码如下:

[DataType(DataType.DateTime)]
public DateTime LastUpdated { get; set; }

object.LastUpdated = DateTime.UtcNow;
context.Update(object);

感谢您的帮助!

【问题讨论】:

  • object 中的值是否设置正确?而context是什么对象?
  • 是的,该值看起来正确,所有其他值(字符串、货币等)都正确存储。 LastUpdated 也被存储,但只是日期部分。
  • 这里的代码可以单独工作。问题要么是数据库列类型以某种方式发生了变化,要么是有一些其他代码在调整时间部分。
  • @ChrisPratt 数据库类型从 Date 更改为 DateTime(几天前),但没有达到预期的效果(正如我们现在检测到的那样)。
  • 好吧,我相信现在一切都清楚了,如果投反对票的人回复它可能会很好:-)

标签: sql-server asp.net-mvc asp.net-core


【解决方案1】:

数据库类型是Date,改为DataTime,但是手动更改,我们错过了:

entity.Property(e => e.LastUpdated).HasColumnType("date");

应该是:

entity.Property(e => e.LastUpdated).HasColumnType("datetime");

ChrisPratt 和其他人,谢谢!

【讨论】:

    【解决方案2】:

    阅读您的 c# 代码,我认为问题基本上是使用 UTC 函数,因为在您的表中数据类型是 datetime 而不是 datetimeoffset,否则,在 C# 中,您试图向其发送 UTC 数据,只是为了测试我的建议是将其更改为

    [DataType(DataType.DateTime)]
    public DateTime LastUpdated { get; set; }
    
    object.LastUpdated = DateTime.Now;
    context.Update(object);
    

    【讨论】:

    • 感谢您的提示,但现在没有任何区别。 Now 和 UtcNow 都返回一个 DateTime。
    • 一种快速的确认方法是简单地添加一个格式化的日期,以确认问题是否在 LastUpdated 属性的分配中。
    • SQL Profiler 显示未提供时间部分:[LastUpdated] = @p8, @p8='2019-03-15'
    • 好点,您是否在 SQL 配置文件中使用 DateTime.Now 和 DateTimeNowUTC 以及格式化的硬编码值测试了这两种情况?测试这 3 个选项
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2020-04-15
    • 2023-03-16
    • 2020-12-08
    • 1970-01-01
    • 2016-07-04
    • 2018-04-25
    相关资源
    最近更新 更多