我启动了一个新项目C#,并在包控制台窗口中使用了“enable-migrations”命令。这自然会为我的项目添加迁移。然后我将自动迁移设置为true,这样当我调用“update-database”时,它将为我创建包含所有键的表格。
唯一的问题是我有多个想要这样做的网站,它们都使用ASP.NET成员资格提供程序登录。通过自动代码迁移创建了一堆帐户表供我使用。但是这些表都被称为相同,所以如果我这样做针对不同站点的同一数据库,它们将相互覆盖。所以我得到的问题是:如何为实体框架创建的表指定前缀?
我在搜索过程中看到过如何做到这一点的几个想法,但它们对我不起作用(必要的属性不是出于某种原因等等。)
谢谢
Xenoxsis
答案 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-s和CF匹配。这不完全是你需要的,但有一个详细的描述,可能的方法解决这个我刚才写的...
总结......
对我有用的是使用Update-Database -Script
这会创建一个带有“迁移差异”的脚本,您可以这样做 手动应用为目标服务器数据库上的SQL脚本(和您一样) 应该插入正确的迁移表行等。)。
如果仍然无效 - 你仍然可以做两件事......(更多内幕)...
答案 1 :(得分:0)
无论如何,我不知道让Entity Framework在所有实体中自动执行此操作。但您可以使用属性或流畅的API强制使用表名或模式来获得所需的效果。例如:
[Table("[put prefix here]_Users", Schema = "[put schema here]")]
public class User {
// ...
}