首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于类接口的自定义网格查询实现

基于类接口的自定义网格查询实现
EN

Stack Overflow用户
提问于 2016-06-17 07:15:27
回答 1查看 117关注 0票数 2

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

我有一个接口:

代码语言:javascript
复制
public interface IHaveTimestamps 
{
    DateTime CreatedOn { get; set; }
    DateTime UpdatedOn { get; set; }
}

现在,我只想在Db.Insert<T>()实现IHaveTimestamps的情况下重写IHaveTimestamps方法,对于T的其他实例,它应该根据默认行为执行Insert

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

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

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-17 11:10:44

看看OrmLite全局插入/更新过滤器,它已经允许您这样做,例如:

代码语言:javascript
复制
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;
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37875338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档