我有一个表,其字段不为空且定义了默认值
[CreatedOn] not null default(getdate())
我在dapper模型中使用的属性是可以为空的DateTime
public DateTime? CreatedOn { get; set; }
如果我尝试插入,则会尝试在非空字段中插入空值时抛出异常。
cm.Insert<MyObject>(obj); //Throws because CreatedOn == null
我正在寻找的是数据库设置的默认值,并且在我读取对象时仍能看到该值。因为Dapper将值传递为null,所以数据库会抛出错误。如果我忽略该属性,那么我就失去了阅读它的能力。我希望单向忽略,或者让旗手知道会有违约的旗帜。如何使这项工作?
答案 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; }
}