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

时间:2017-07-27 08:25:13

标签: .net dapper dapper-contrib

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

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

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

1 个答案:

答案 0 :(得分:0)

好吧看起来像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作为起点。