Условное семя с миграциями структуры сущностей

Некоторое время я пытался найти решение о том, как я мог бы использовать метод seed в конфигурации миграции, не опасаясь перезаписи обновленных данных при следующем запуске метода seed.

Короче говоря, я понимаю, что addorupdate, как показано в различных руководствах, сбрасывает все значения для каждого объекта, следовательно, перезаписывает любые изменения, которые могли произойти с этим объектом с момента его первоначального заполнения.

В моем текущем проекте я хочу иметь возможность использовать набор шаблонов электронной почты по умолчанию. Помещение их в метод seed гарантирует, что они всегда присутствуют в моем коде. Однако я хочу, чтобы пользователь приложения мог редактировать часть содержимого по своему усмотрению. Таким образом, я не могу сделать так, чтобы шаблон сбрасывал все, что запускает метод seed, так как он удаляет изменения.

Мое решение таково:

    protected override void Seed(Jobboard.Sandbox.Model.JobboardContext context)
    {
        Guid DefaultTemplateGuid = Guid.Parse("xxxxx");

        context.Templates.AddOrUpdate(
              t => t.Guid,
                  context.Templates.FirstOrDefault(x => x.Guid == DefaultTemplateGuid)
                  ?? new Template {
                     Guid = DefaultTemplateGuid,
                     Name = "Default Template",
                     Content = "Some Default Content"
                  }
        );
    }

В целом, это, кажется, работает просто отлично, и мой вопрос заключается в том, может ли кто-нибудь определить какие-либо проблемы, выполняя посевы таким образом, поскольку это не совсем то, как команда EF предлагает использовать эту функцию, и я бы предпочел, чтобы это не закончилось головной болью из-за этого позже. на.

Большое спасибо за чтение.

1 ответ

Решение

Вероятно, вы можете сохранить несколько поездок в базу данных, не используя метод расширения AddOrUpdate. Вот упрощенная версия вашего кода.

protected override void Seed(Jobboard.Sandbox.Model.JobboardContext context)
{
    var defaultTemplateGuid = Guid.Parse("xxxxx");
    var defaultTemplate = context.Templates.SingleOrDefault(
        t => t.Guid == defaultTemplateGuid);

    if (defaultTemplate == null)
    {
        context.Templates.Add(
            new Template
                {
                    Guid = defaultTemplateGuid,
                    Name = "Default Template",
                    Content = "Some Default Content"
                });
    }
}
Другие вопросы по тегам