【问题标题】:.NET Core DateTime doesn't correctly insert/update DateTime column in SQL Server.NET Core DateTime 无法在 SQL Server 中正确插入/更新 DateTime 列
【发布时间】:2019-10-28 11:13:55
【问题描述】:

我正在尝试将一些 DATETIME 从 .NET Core 和 Entity Framework 插入到我的 SQL Server 数据库中,但我遇到了奇怪的行为。

首先,插入的数据取自 VueJS API 调用,我发送的数据是这样的:

...
lastModified: "2019-10-28T10:54:07.556Z"
...

然后,我在 C# 后端收到的内容似乎是正确的,我从我的模型中将它作为对象接收,lastModified 属性似乎还可以:

然后我使用以下代码将我的数据插入到我的数据库中:

using (var context = new TestContext(optionsBuilder.Options))
{
    var originalSave = context.SauvegardeIntervention.FirstOrDefault(s => s.IdIntervention == id);
    context.Entry(originalSave).CurrentValues.SetValues(save);
    context.SaveChanges();

    return true;
}

并且插入是正确完成的,但是,当查看我的数据库中插入的内容时,日期时间的时间部分就像被删除了:

但是当我检索 DateTime 属性时,我得到了与之前发送的完全相同的对象...

我的问题是为什么我的datetime 属性在我的数据库中没有时间部分?

我的这个对象的 EF 模型是:

public partial class SauvegardeIntervention
{
    public int IdIntervention { get; set; }
    public string SauvegardeContent { get; set; }
    public bool? CurrentlyInUse { get; set; }
    public DateTime? LastModified { get; set; }

    public virtual Intervention IdInterventionNavigation { get; set; }
}

对应的SQL Server表是这样的:

【问题讨论】:

  • 请出示您的 EF 型号,最好是 minimal reproducible example
  • 什么是列类型? get 属性中是否有自定义逻辑?
  • 使用实体框架时,builder有什么列类型,例如modelBuilder.Properties() .Configure(c => c.HasColumnType("datetime2"));
  • 我添加了SauvegardeIntervention对象的结构,模型有点长,这里不能复制

标签: c# sql-server datetime vue.js


【解决方案1】:

好吧,我猜 eVolve 是在正确的轨道上,我刚刚检查了模型,我有

entity.Property(e => e.LastModified)
                .HasColumnName("lastModified")
                .HasColumnType("date");

代替

entity.Property(e => e.LastModified)
                .HasColumnName("lastModified")
                .HasColumnType("datetime2");

【讨论】:

    猜你喜欢
    • 2022-07-04
    • 1970-01-01
    • 2013-10-07
    • 2014-07-06
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多