Хобрук: Ваш путь к мастерству в программировании

Обновите поля даты создания и изменения в классе DBContext с помощью Entity framework

Есть ли способ обновить или вставить объекты с их полями DateCreated и UpdateDate, установленными на некоторую дату, когда объект сохраняется.

У меня есть вспомогательный класс поставщика данных, который инкапсулирует функции обновления, добавления и удаления для всех моих объектов данных. Однако, когда объект сохраняется, поля DateCreated и UpdateDate имеют значение null, и я не назначаю им текущую дату. Я хочу иметь возможность сохранять свои объекты с назначенными датами. Я хочу избежать изменения кода везде, где выполняется действие сохранения. Можно ли это сделать в классе DBContext?

15.04.2017

Ответы:


1

Переопределите DbContext.SaveChanges, чтобы реализовать эту сквозную функцию. Если вам нужно присвоить свойства только определенным типам сущностей, то для их различения можно использовать атрибут интерфейса или класса вместо медленной проверки Reflection:

public partial class PostalDbContext
{
    public override int SaveChanges()
    {
        DateTime time = DateTime.Now;

        var entries = ChangeTracker.Entries()
            .Where(entry => entry.Entity is ITrackableEntity)
            .ToList();

        ITrackableEntity x;

        foreach (var entry in entries.Where(e => e.State == EntityState.Added))
        {
            entry.SetPropertyValue(nameof(x.DateCreated), time);
        }

        foreach (var entry in entries.Where(e => e.State == EntityState.Modified))
        {
            entry.SetPropertyValue(nameof(x.DateModified), time);
        }

        return base.SaveChanges();
    }
}

public static class DbEntityEntryEx
{
    public static void SetPropertyValue<T>(this DbEntityEntry entry, string propertyName, T time)
    {
        entry.Property(propertyName).CurrentValue = time;
    }
}
16.04.2017
Новые материалы

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

Математика и интуиция - Часть 1
У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..