gpt4 book ai didi

entity-framework - 具有 Entity Framework 迁移的条件种子

转载 作者:行者123 更新时间:2023-12-04 08:29:13 26 4
gpt4 key购买 nike

一段时间以来,我一直在尝试寻找一种解决方案,即如何在迁移配置中使用种子方法,而不用担心下次运行种子方法时更新的数据被覆盖。

简而言之,我的理解是,如各种教程中所示,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 团队建议使用此功能的方式,我希望不要以头疼结束稍后再讨论。

非常感谢阅读。

最佳答案

通过不使用 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"
});
}
}

关于entity-framework - 具有 Entity Framework 迁移的条件种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com