0

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

[CreatedOn] not null default(getdate())

我在模型中为 dapper 使用的属性是可为空的 DateTime

public DateTime? CreatedOn { get; set; }

如果我尝试插入,尝试在非空字段中插入空值会引发异常。

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

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

4

1 回答 1

2

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

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

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

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

最后,如果您希望数据库处理此字段,可以使用以下示例:

  [Table("my_objects")]
  public class MyObject
  {
    [Dapper.IgnoreUpdate, Dapper.IgnoreInsert]
    public DateTime? CreatedOn { get; set; }
  }
于 2017-02-03T19:40:40.440 回答