我想基于对象的实现扩展某些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
答案 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;
};