基于类接口的自定义ormlite查询实现

时间:2016-06-17 07:15:28

标签: servicestack ormlite-servicestack

我想基于对象的实现扩展某些ORMLite方法。例如,

我有一个界面:

class CustomFileHandler(TimedRotatingFileHandler):
  def doRollover(self):
     super().doRollover()
     self.stream.write(desc_string)

# to use it 
handler = CustomFileHandler("log/info.log", when="D", interval=30, backupCount=13)
logger.addHandler(handler)

现在我只想在public interface IHaveTimestamps { DateTime CreatedOn { get; set; } DateTime UpdatedOn { get; set; } } 实现Db.Insert<T>()时覆盖T方法,而对于其他T实例,它应该根据默认值执行IHaveTimestamps行为。

这样我可以集中设置CreatedOn和UpdatedOn值,而不是在任何地方手动执行。

我可以通过重载Insert / Update方法来实现这一点,这样我需要做的就是更新模型以继承接口,所有数据库操作都会自行处理,或者我需要做些什么来做这样:

Insert

1 个答案:

答案 0 :(得分:3)

看看OrmLite Global Insert/Update Filters已经允许你做这样的事情,例如:

public interface IAudit 
{
    DateTime CreatedDate { get; set; }
    DateTime ModifiedDate { get; set; }
    string ModifiedBy { get; set; }
}

OrmLiteConfig.InsertFilter = (dbCmd, row) => {
    var auditRow = row as IAudit;
    if (auditRow != null)
        auditRow.CreatedDate = auditRow.ModifiedDate = DateTime.UtcNow;
};

OrmLiteConfig.UpdateFilter = (dbCmd, row) => {
    var auditRow = row as IAudit;
    if (auditRow != null)
        auditRow.ModifiedDate = DateTime.UtcNow;
};