Ormlite POCO中DateTime字段的SQL文本/关键字

Ormlite POCO中DateTime字段的SQL文本/关键字,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我在postgres 9.3中使用servicestack/ormlite 4.0.32 我在表中有几个timestamp列(以及相关POCO中相应的DateTime字段) 如何在ormlite POCOInsert()或Update()方法中使用SQL文本,如NOW()、CURRENT\u TIMESTAMP等?默认情况下,DateTime字段由DateTime.Min填充 我不想使用数据库触发器,最好使用SQL文本,如NOW()。当您插入或更新时,不可为null的DateTime值将默认为D

我在postgres 9.3中使用servicestack/ormlite 4.0.32

我在表中有几个
timestamp
列(以及相关POCO中相应的
DateTime
字段)

如何在ormlite POCO
Insert()
Update()
方法中使用SQL文本,如
NOW()
CURRENT\u TIMESTAMP
等?默认情况下,DateTime字段由
DateTime.Min
填充


我不想使用数据库触发器,最好使用SQL文本,如
NOW()

当您
插入
更新
时,不可
为null的
DateTime
值将默认为
DateTime.Min
。因此,您应该将它们设置为所需的值

手动设置: 您可以在Insert或Update语句中通过指定要成为
DateTime的值来执行此操作。现在

db.Insert(newperson{Id=1,FirstName=“John”,CreatedDate=DateTime.Now});
使用OrmLite的插入/更新筛选器: 但是,我怀疑您希望避免在Insert或Update语句中自己执行此操作,这通常使用OrmLite的Insert/Update筛选器功能来处理,该功能可用于设置记录创建和修改时间

发件人:

公共接口IAudit
{
DateTime CreatedDate{get;set;}
DateTime ModifiedDate{get;set;}
字符串由{get;set;}修改
}
OrmLiteConfig.InsertFilter=(dbCmd,行)=>{
var auditRow=作为IAudit的行;
if(auditRow!=null)
auditRow.CreatedDate=auditRow.ModifiedDate=DateTime.UtcNow;
};
OrmLiteConfig.UpdateFilter=(dbCmd,行)=>{
var auditRow=作为IAudit的行;
if(auditRow!=null)
auditRow.ModifiedDate=DateTime.UtcNow;
};
然后在数据库表类上:

公共类MyTable:IAudit
{
//你的财产
...
//审计属性
DateTime CreatedDate{get;set;}
DateTime ModifiedDate{get;set;}
字符串由{get;set;}修改
}

当您插入/更新
MyTable
时,过滤器将自动更新时间戳。

感谢@Scott提供的详细答案!不幸的是,它仍然不能满足我的具体要求。服务消费者(主要是winforms)将分布在各大洲的不同地区——我不能相信技术上不那么成熟的最终用户(主要是低水平的医疗技术人员)我认为ormlite应该实现对SQL文本的支持——我已经浏览了文档,但没有找到任何线索。。无论如何,我已经在DB端实现了触发器——但我希望在客户端找到更优雅的解决方案。感谢您提供有关OrmLite审核过滤器的详细信息!我为什么不在我的POCO的构造函数中设置它,而不用在插入和更新时处理过滤器?