【问题标题】:Why EF-core code first makes DateTime2 instead of DateTime?为什么 EF-core 代码首先生成 DateTime2 而不是 DateTime?
【发布时间】:2019-10-06 12:28:26
【问题描述】:

我首先是 EF-core 代码的新手,我想成为一个日期时间形式的变量,但它是 Datetime2。我该如何解决?

这是 EF 核心、代码优先方法和 sql server 2017

public class MB_Message
{
    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int MessageID { get; set; }
    public DateTime? expireDateTime { get; set; }
    public string TypeName { get; set; }
    public bool IsForceLastSend { get; set; }
    public DateTime MessageDateTime { get; set; }
    public bool ReadOnce { get; set; }
    public string ExeCode { get; set; }
    [ForeignKey("MB_Queue")]
    public int QueueCode { get; set; }
    public int? UserID { get; set; }
    [ForeignKey("MB_MessageBody")]
    public int BodyID { get; set; }
    public bool Enable { get; set; }

}

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    在您的 dbcontext 的 OnModelCreating 方法中添加以下内容:

      protected override void OnModelCreating(ModelBuilder builder)
        {
    
            builder.Entity<MB_Message>()
                .Property(x=> x.MessageDateTime )
                .HasColumnType("datetime");
        }
    

    【讨论】:

    • 我试过了,但这不是我想要的。它只产生日期。如果我放日期时间而不是日期,它将再次是 datetime2
    • 在 dbcontext 和 OnModelCreating 方法中添加:builder.Entity&lt;MB_Message&gt;() .Property(f =&gt; f.MessageDateTime ) .HasColumnType("datetime");
    【解决方案2】:

    回答“为什么?”;因为datetime 是旧的 SQL Server 特定数据类型,Microsoft recommend you avoid now。也许您需要它来加入现有表,但不建议使用 datetime 进行新工作。

    datetime2(3)相比,日期时间是:

    • 与其他 SQL 系统不兼容,因此需要转换
    • 每行多占用 1 个字节的数据(每次读取时为每个索引和 RAM 复制)
    • 不提供精度选项

    此外,在大多数情况下,您可能需要datetime2(0),它比日期时间少 2 个字节。

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2012-09-10
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多