使用 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; }
}
我有一个 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; }
}