我想基于对象的实现扩展某些ORMLite方法。例如,
我有一个接口:
public interface IHaveTimestamps
{
DateTime CreatedOn { get; set; }
DateTime UpdatedOn { get; set; }
}现在,我只想在Db.Insert<T>()实现IHaveTimestamps的情况下重写IHaveTimestamps方法,对于T的其他实例,它应该根据默认行为执行Insert。
这样我就可以集中设置CreatedOn和UpdatedOn值,而不是在任何地方手动设置。
我可以通过重载Insert/Update方法来做到这一点,这样我所需要做的就是更新要从接口继承的模型,所有DB操作都会自行处理,或者我需要这样做:
public static class DbExtensions
{
public static long MyInsert<T> (this IDbConnection dbConn, T obj, bool selectIdentity = false) where T : IHaveTimestamps {
obj.CreatedOn = DateTime.UtcNow;
obj.UpdatedOn = DateTime.UtcNow;
return dbConn.Insert<T>(obj);
}
public static long MyUpdate<T> (this IDbConnection dbConn, T obj) where T : IHaveTimestamps {
obj.UpdatedOn = DateTime.UtcNow;
return dbConn.Update<T>(obj);
}
}发布于 2016-06-17 11:10:44
看看OrmLite全局插入/更新过滤器,它已经允许您这样做,例如:
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;
};https://stackoverflow.com/questions/37875338
复制相似问题