一段时间以来,我一直试图找到一个解决方案,说明如何在迁移配置中使用种子方法,而不必担心下次运行种子方法时更新的数据会被覆盖。
简而言之,我的理解是 addorupdate,如各种教程中所示,将重置每个对象的所有值,从而覆盖该对象自最初播种以来可能发生的任何更改。
在我当前的项目中,我希望能够播种一组默认电子邮件模板。将它们放在种子方法中将确保它们始终存在于我的代码中。但是,我希望应用程序的用户能够编辑他们认为合适的一些内容。所以我不能很好地将模板重置为种子方法运行的所有内容,因为它会删除更改。
我的解决方案是这样的:
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 团队建议使用此功能的方式,我不希望以后为此头疼在。
非常感谢您的阅读。