【问题标题】:Is it okay to initialize/seed a database data during Startup of an application?在应用程序启动期间初始化/播种数据库数据是否可以?
【发布时间】:2020-07-26 13:33:54
【问题描述】:

我们希望以编程方式确保数据库表具有特定的行集(基于有时变化的枚举)。我们正在使用带有代码优先迁移的 EF Core 2.2,并且正在寻找合适的位置来播种这些数据。我们曾认为向我们的Startup.cs 添加播种方法是个好主意,但微软的documentation

种子代码不应成为正常应用执行的一部分,因为这可能会在多个实例运行时导致并发问题,并且还需要应用具有修改数据库架构的权限。

Startup.cs 中的代码是否被视为“正常应用执行的一部分”?

我们的应用目前只运行 1 个实例,但未来可能会有多个。此外,我们还有一个 Azure Functions 应用程序和一个控制台应用程序,它们可能还需要确保数据库表在执行之前具有正确的行。尽管有这些担忧,但我看到answers on other threads 被接受和支持,说作为Startup.cs 的一部分进行初始化是可以的。我们这样做会不会自取其辱?

【问题讨论】:

  • 如果您的枚举经常更改,最好将其作为表存储在数据库中,或者作为 k/v 存储在键值表中。

标签: asp.net-core .net-core entity-framework-core entity-framework-core-2.2


【解决方案1】:

来自文档:

根据部署的限制,初始化代码可以以不同的方式执行:

在本地运行初始化应用程序。
使用主应用部署初始化应用,调用初始化例程并禁用或删除初始化应用。

我对此的解释是,您可以使用publishing profiles 部署控制台应用程序,以确保在启动时数据库种子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多