基于class接口的自定义ormlite查询实现
Custom ormlite query implementation based on class interface
我想根据对象的实现扩展某些 ORMLite 方法。例如,
我有一个界面:
public interface IHaveTimestamps
{
DateTime CreatedOn { get; set; }
DateTime UpdatedOn { get; set; }
}
现在我只想在 T
实现 IHaveTimestamps
时重写 Db.Insert<T>()
方法,对于 T 的其他实例,它应该基于 Insert
执行 Insert
默认行为。
这样我就可以集中设置 CreatedOn 和 UpdatedOn 值,而不是在任何地方手动设置。
我可以通过重载 Insert/Update 方法来做到这一点吗,这样我需要做的就是更新模型以从接口继承,所有数据库操作都会自行处理,或者我需要做这样的事情:
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);
}
}
看看 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;
};
我想根据对象的实现扩展某些 ORMLite 方法。例如,
我有一个界面:
public interface IHaveTimestamps
{
DateTime CreatedOn { get; set; }
DateTime UpdatedOn { get; set; }
}
现在我只想在 T
实现 IHaveTimestamps
时重写 Db.Insert<T>()
方法,对于 T 的其他实例,它应该基于 Insert
执行 Insert
默认行为。
这样我就可以集中设置 CreatedOn 和 UpdatedOn 值,而不是在任何地方手动设置。
我可以通过重载 Insert/Update 方法来做到这一点吗,这样我需要做的就是更新模型以从接口继承,所有数据库操作都会自行处理,或者我需要做这样的事情:
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);
}
}
看看 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;
};