带有实体框架自动代码迁移的前缀表

时间:2013-03-25 13:24:54

标签: c# entity-framework ef-code-first ef-migrations

我启动了一个新项目C#,并在包控制台窗口中使用了“enable-migrations”命令。这自然会为我的项目添加迁移。然后我将自动迁移设置为true,这样当我调用“update-database”时,它将为我创建包含所有键的表格。

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

我在搜索过程中看到过如何做到这一点的几个想法,但它们对我不起作用(必要的属性不是出于某种原因等等。)

谢谢

Xenoxsis

2 个答案:

答案 0 :(得分:1)

我不确定你打算如何做到这一点 - 如果我做对了你想要保留one database (shared) in between number of web sites - 但是,每个网站都有自己的会员表,命名方式不同,有不同的前缀,对吧?

第一个问题是for each Db/table name change - you need a 'code to match' - 即代码第一个实体和代码,Db中的“迁移表” - 和表都是同步的 - 所以它可以一起工作。从这个意义上说,只是在Db中更改脚本或表名称将无法正常工作It has to be done at the level of attributes (as @Steven suggested) or fluent configuration.

在您的情况下,这意味着您需要以某种方式为每个网站“构建”单独的配置,将它们单独部署(代码)到每个网站 - 并构建一个包含所有小网站的mega Db {每个{1}}合并在一起。

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

  • 放置variants属性(或通过流畅的配置)
  • 构建代码 - “改变”每个表的名称 - 并重建(理想情况下,您可能需要使用一些工具,代码生成器在批处理中自动执行此操作 - 即您构建,从外部复制文件,更改名称并重复)
  • 还为每种情况(表名)构建“迁移” - 保存迁移 作为文件 - 并且还Table保存实际 每个案例的脚本(重要)。
  • 保存每次迁移 - 或者我们可以 说一个'脚本'来代表。
  • 完成后 - 您需要Update-Database -Script 迁移 - 脚本 - 转换为merge - 即删除 相同的一组表(当然只留一个) - 并复制全部 会员表的不同集合。
  • 删除one big master script 从数据库 - 因为它肯定是不同步,不会让你 做任何事情(或者我认为在代码中也有一个标志只是忽略 那,现在没有它)。详情见下文 帖子。
  • 使用您创建的脚本部署一个主Db
  • 部署 特定代码 - 每个站点。
  • 为所有工作祷告:)

必须有一些更聪明的东西 - 但另一方面,迁移不适用于这种情况,所以如果不是不可能的话,这将很难实现。

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

如何将迁移与现有数据库同步 - 面向生产场景,保持Db-s和CF匹配。这不完全是你需要的,但有一个详细的描述,可能的方法解决这个我刚才写的...

MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

总结......

  

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

     

这会创建一个带有“迁移差异”的脚本,您可以这样做   手动应用为目标服务器数据库上的SQL脚本(和您一样)   应该插入正确的迁移表行等。)。

     

如果仍然无效 - 你仍然可以做两件事......(更多内幕)...

答案 1 :(得分:0)

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

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