2017-02-03 63 views
0

我已经定义使用小巧玲珑插入到用默认值的表

[CreatedOn] not null default(getdate()) 

,有一个字段不为空并且具有默认值的表的我在模型中使用了短小精悍的属性是可空DateTime

public DateTime? CreatedOn { get; set; } 

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

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

我在找的是数据库设置的默认值,并且在读取对象时仍然能够看到该值。由于Dapper将值作为空值传递,因此数据库将引发错误。如果我忽略了财产,那么我就失去了阅读它的能力。我希望能够单方面忽略,或者让旗手知道会有一个默认值。如何做这项工作?

回答

0

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

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

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

但是,如果您正试图处理created_at,并通过短小精悍的,而不是在数据库中的updated_at,我会建议路线如下像我在这里所概述 - Dapper control dates

最后,如果你希望数据库来处理这个领域,你可以使用下面的例子:

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

我正在寻找的是由数据库中设置默认,并仍然能够看到当我读对象时,这个值。由于Dapper将值作为空值传递,因此数据库将引发错误。如果我忽略了财产,那么我就失去了阅读它的能力。我希望能够单方面忽略,或者让旗手知道会有一个默认值。 – QueueHammer

+1

Ahhh,您可以使用CreatedOn上的以下属性 - [Dapper.IgnoreUpdate,Dapper.IgnoreInsert]。我编辑了上面的例子来说明这个属性如何适应。这将防止DapperSimpleCrud在插入或更新时使用它们。 – Zabbu

+0

什么名称空间是那些属性? Dapper.Contrib有一个名为Write的属性,它的值为false,但不妨碍写入。 – QueueHammer