Dapper.Contrib - 如何获取更改跟踪值?

Posted

技术标签:

【中文标题】Dapper.Contrib - 如何获取更改跟踪值?【英文标题】:Dapper.Contrib - how to get change tracking values? 【发布时间】:2017-07-27 08:25:13 【问题描述】:

我正在开发一个使用 Dapper 作为 ORM 的 .Net 项目。 EF 并不是一个真正的选择,因为我们需要 DB/schema 在运行时具有一定的灵活性。

使用 Dapper.Contrib,我们可以使用“更改跟踪”功能来优化写入数据库的内容。我们真正想要的是能够访问这些信息(发生了哪些变化)并将其写入“更改历史记录”日志。

Dapper.Contrib 中似乎没有很多关于此的文档。有人对如何做到这一点有任何建议吗?谢谢。

【问题讨论】:

【参考方案1】:

好吧,看起来 Dapper.Contrib 的“更改跟踪”只是一个效率助手(它只为实际更改编写 SQL)。我在启动期间使用反射来预加载模型结构,然后用它来检查我的两个模型版本之间的变化。

如果对任何人有帮助,代码如下所示(注意 testProps 是类属性的反映列表,DifferenceCompare 是用于跟踪更改的简单模型):

    List<DifferenceCompare> differences = new List<DifferenceCompare>();
        foreach (PropertyInfo property in testProps)
        
            object value1 = property.GetValue(one, null);
            object value2 = property.GetValue(two, null);
            if (value1 != null && value2 != null)
            
                if (!value1.Equals(value2))
                
                    differences.Add(new DifferenceCompare(
                        property.Name.ToString(), 
                        value1.ToString(), 
                        value2.ToString()));
                
            
            else if (value1 == null && value2 != null)
            
                differences.Add(new DifferenceCompare(
                    property.Name.ToString(), "", value2.ToString()));
            
        

感谢Oskar Kjellin 的起点。

【讨论】:

以上是关于Dapper.Contrib - 如何获取更改跟踪值?的主要内容,如果未能解决你的问题,请参考以下文章

Dapper.Contrib.Extensions问题

dapper.contrib 是不是支持 varchar 类型的主键?

调试 Dapper Contrib(或任何 ORM) - 如何在 Visual Studio 中查看生成的 SQL - 例如更新?

Dapper的新实践,Dapper.Contrib的使用与扩展

Dapper.Contrib 开发.net core程序,兼容多种数据库

Dapper.Contrib 是不是支持插入到使用 Identity 列的表中?