Условное семя с миграциями структуры сущностей
Некоторое время я пытался найти решение о том, как я мог бы использовать метод 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"
});
}
}