Dapper.Contrib - как получить значения отслеживания изменений?
Я работаю над проектом.Net, используя Dapper в качестве ORM. EF на самом деле не вариант, так как нам нужно, чтобы DB/ схема была несколько гибкой во время выполнения.
Используя Dapper.Contrib, мы можем использовать функцию "отслеживания изменений" для оптимизации того, что записывается в базу данных. Нам действительно хотелось бы иметь доступ к этой информации (что изменилось) и записать ее в журнал "истории изменений".
Похоже, в Dapper не так много документации по этому поводу. Кто-нибудь получил какие-либо предложения о том, как это можно сделать? Благодарю.
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 за отправную точку этого.