我正在开发一个使用 Dapper 作为 ORM 的 .Net 项目。EF 并不是一个真正的选择,因为我们需要 DB/schema 在运行时具有一定的灵活性。
使用 Dapper.Contrib,我们可以使用“更改跟踪”功能来优化写入数据库的内容。我们真正想要的是能够访问这些信息(更改了什么)并将其写入“更改历史记录”日志。
Dapper.Contrib 中似乎没有很多关于此的文档。有人对如何做到这一点有任何建议吗?谢谢。
我正在开发一个使用 Dapper 作为 ORM 的 .Net 项目。EF 并不是一个真正的选择,因为我们需要 DB/schema 在运行时具有一定的灵活性。
使用 Dapper.Contrib,我们可以使用“更改跟踪”功能来优化写入数据库的内容。我们真正想要的是能够访问这些信息(更改了什么)并将其写入“更改历史记录”日志。
Dapper.Contrib 中似乎没有很多关于此的文档。有人对如何做到这一点有任何建议吗?谢谢。
好的,看起来 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的起点。