前缀表与实体框架自动代码迁移
本文关键字:代码 迁移 框架 实体 前缀 | 更新日期: 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.
在您的情况下,这意味着您需要为每个站点"构建"单独的配置,将它们单独(代码)部署到每个站点-并构建一个包含每个合并在一起的所有小variants
的mega 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 {
// ...
}