前缀表与实体框架自动代码迁移

本文关键字:代码 迁移 框架 实体 前缀 | 更新日期: 2023-09-27 18:05:50

我开始了一个新的c#项目,我在包控制台窗口中使用了"enable-migrations"命令。这很自然地为我的项目增加了迁移。然后我将自动迁移设置为true,这样当我调用"update-database"时,它将为我创建包含所有键的表。

唯一的问题是,我有多个网站想要这样做,这都使用ASP。. NET成员资格提供程序以登录。它通过自动代码迁移创建了一堆帐户表供我使用。但是这些表的名称都是相同的,所以如果我针对不同站点的相同数据库执行此操作,它们将相互覆盖。因此,我遇到的问题是:如何为实体框架创建的表指定前缀?

我已经看到了一些关于如何在搜索时做到这一点的想法,但它们都不适合我(由于某些原因没有必要的属性等等)

谢谢

Xenoxsis

前缀表与实体框架自动代码迁移

我不确定你打算如何做到这一点-如果我得到它是正确的,你想保持one database (shared) in between number of web sites -然而,每个网站有自己的成员表,命名不同,用不同的前缀,对吗?

第一个问题是for each Db/table name change - you need a 'code to match' -即代码优先实体和代码,数据库中的"迁移表"-和表都是同步的-所以它可以像它应该的那样一起工作。从这个意义上说,只是更改Db中的脚本或表名将不起作用It has to be done at the level of attributes (as @Steven suggested) or fluent configuration.

在您的情况下,这意味着您需要为每个站点"构建"单独的配置,将它们单独(代码)部署到每个站点-并构建一个包含每个合并在一起的所有小variantsmega Db

这将很难管理-但你可以尝试(我上面描述的)-我不知道它是否有效(因为这需要很多"基础设施"来尝试这个)-但也许沿着这些线…

  • 设置Table属性(或通过fluent配置)
  • 构建代码-"改变"每个表的名称-并重建(理想情况下,您可能需要使用一些工具,代码生成器来批量自动完成此操作-即您构建,外部复制文件,更改名称并重复)
  • 为每种情况(表名)构建"迁移",并保存迁移并执行Update-Database -Script以保存实际的每种情况的脚本(重要)。
  • 保存每次迁移-或者我们可以说一个"脚本"来表示。
  • 一旦完成-你需要merge迁移-脚本-到one big master script -即删除一套相同的表格(当然只留下一张)——然后复制所有的成员表的不同集合。
  • 删除migration table从数据库-因为那肯定是不同步的,不会让你做任何事情(或者在代码中也有一个标志,我认为只是忽略那个,现在不要拿它)。有关详细信息,请参阅下面我的其他职位。
  • 使用您创建的脚本部署一个主数据库
  • 部署具体代码-每个网站。
  • 祈祷一切顺利:)

一定有更聪明的方法——但另一方面,迁移并不是为这种情况而设计的,所以即使不是不可能,也很难做到这一点。

一些可能有帮助的一般信息…

如何与现有数据库同步迁移—面向生产场景,维护Db-s和CF匹配。它不完全是你需要的,但有一个详细的描述,可能的方法来解决这个问题,我写了一会儿之前…

MVC3和代码优先迁移- "模型支持'blah'自从数据库创建以来,上下文已经发生了变化。

总结……

对我有用的是使用Update-Database -Script

创建一个带有"迁移差异"的脚本,您可以在目标服务器数据库(以及您)上手动应用SQL脚本应该得到正确的迁移表行插入等)。

如果这仍然不起作用-你仍然可以做两件事…(内部)…

我不知道如何使实体框架在所有实体中自动执行此操作。但是您可以使用属性或流畅API强制使用表名或模式来获得所需的效果。例如:

[Table("[put prefix here]_Users", Schema = "[put schema here]")]
public class User { 
    // ... 
}