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

时间:2017-02-03 16:39:44

标签: dapper-extensions

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

[CreatedOn] not null default(getdate())

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

public DateTime? CreatedOn { get; set; }

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

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

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

1 个答案:

答案 0 :(得分:1)

对于上面的问题,我通过在构造函数中添加它们来非常简单地处理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; }
  }