【问题标题】:Entity Framework 6 database migrations for isolated multi-tenant setup用于隔离多租户设置的 Entity Framework 6 数据库迁移
【发布时间】:2013-12-04 12:22:35
【问题描述】:

我了解数据库迁移可能不是部署此解决方案的最佳方法,因此我们将不胜感激任何建议。

我有 x 个相同的数据库架构,每个客户端一个。

我还为这些数据库中的每一个提供了模型,并且能够部署创建新克隆的迁移。到目前为止,我一直在使用 PHP 和脚本来循环遍历所有模式并更新对结构的任何更改。由于 Web API 2 和属性路由,我们正在转向 C# 和 EF6。

我的问题是;有没有办法:

  1. 部署一个构建命令,该命令将执行 update-database 将执行的迁移操作,并向其传递数据库名称(以便创建帐户数据库的新克隆模式?

  2. 部署一个构建命令,该命令可能执行update-database 将通过每个目标数据库递归执行的操作?

【问题讨论】:

    标签: c# asp.net multi-tenant entity-framework-6


    【解决方案1】:

    “我有 x 个相同的数据库模式,每个客户端一个”

    “我也为这些数据库中的每一个提供了模型”

    你的意思是我也有这些模式的模型吗?

    Ef 模型实体链接到 Schema/TableName。

    entity.ToTable("tableName", "schemaName");

    因此,如果每个客户端都有自己的架构,那么每个模型都有该架构中的所有表,并且客户端会获得自己的模型。 那么如何在每个上下文模型上运行更新数据库。我用另一种方式看待这个问题。

    所以答案在于您如何跟踪每个客户信息的架构。

    Powershell migrate.exe approach 可能会引起您的兴趣,以便您可以在许多上下文模型上触发迁移。

    Custom migration operations 也可能很有趣。 Rowan 是一名 EF 开发人员。

    编辑:基于自动迁移评论,这值得一看 Managing migration triggers in code

    【讨论】:

    • 谢谢菲尔。澄清一下:我有一组模型,它们构建一个数据库模式,然后克隆多次,每个客户端一次。连接到正确的上下文不是问题,我为此设置了一个处理程序。我还发现我可以使用 context.Database.CreateIfNotExists() 创建一个新数据库。我会看看你链接的工具,谢谢。我知道这是正确的答案,所以我会继续标记它。我觉得我一开始就没有对这件事做足够的研究。
    • 如果您要使用自动迁移,那么您可以遍历您的客户端数据库列表并触发迁移。我很快就会添加一个链接
    • 传奇!谢谢菲尔:)
    • 不要使用 EF 迁移来更新租户。如果出现问题并且错误消息无用,它会变得非常复杂和麻烦。更好地使用 SQL 项目并使用 SQL 包。可以使用更好的可见性和部署策略。
    猜你喜欢
    • 2014-07-20
    • 2019-02-12
    • 1970-01-01
    • 2013-12-16
    • 2011-01-12
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多