使用 Dapper 插入具有默认值的 Table

Using Dapper to Insert into a Table with Default Values

我有一个 table,它有一个不为空的字段并且定义了默认值

[CreatedOn] not null default(getdate())

我在 dapper 模型中使用的 属性 是一个可为 null 的 DateTime

public DateTime? CreatedOn { get; set; }

如果我尝试插入,则会抛出异常以尝试在非空字段中插入空值。

cm.Insert<MyObject>(obj); //Throws because CreatedOn == null

我正在寻找的是由数据库设置的默认值,并且在我读取对象时仍然能够看到该值。因为 Dapper 将值作为 null 传递,所以数据库会抛出错误。如果我忽略 属性 那么我就失去了阅读它的能力。我希望有一个单向忽略,或者一个标志让 dapper 知道会有一个默认值。怎么做到这一点?

对于上面的问题,我通过将它们添加到构造函数中来非常简单地处理 dapper 默认值。在你的情况下,这就像这样:

  [Table("my_objects")]
  public class MyObject
  {
    public DateTime? CreatedOn { get; set; }

    public MyObject()
    {
      CreatedOn = DateTime.UtcNow;
    }
  }

但是,如果您尝试通过 dapper 而不是在数据库中处理 created_at 和 updated_at,我建议您遵循我在此处概述的路线 -

最后,如果想让数据库处理这个字段,可以使用下面的例子:

  [Table("my_objects")]
  public class MyObject
  {
    [Dapper.IgnoreUpdate, Dapper.IgnoreInsert]
    public DateTime? CreatedOn { get; set; }
  }