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 за отправную точку этого.

Другие вопросы по тегам