在EF6中前缀所有表名

时间:2014-09-07 01:47:01

标签: asp.net-mvc entity-framework-6.1

将MVC5与EF6一起使用,我试图在所有应用程序表名前加上前缀,这样我就可以将2个应用程序放入一个数据库中,让它们完全独立运行。我需要两组不同的用户/角色/声明/等,所以我不能使用其他应用程序中已存在的相同AspNet表名。

阅读this SO question后,我找到了答案:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name));
}

这在使用Add-Migration时会导致错误,因此我必须添加

base.OnModelCreating(modelBuilder);

到我的方法来平息错误。

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name));

}

但是,无论是在我的类型配置代码的上方还是下方添加此行,AspNet表都不会更改名称。就像类型配置行被完全忽略一样。

它更改名称就好了,但是,如果我喜欢这样:

modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName");

当然,这只会更改AspNetUsers表。我甚至不确定要指定哪些模型来更改其他模型。

我的总体目标是拥有以下表格,最好不必手动分配它们: prefix_AspNetRoles prefix_AspNetUserClaims prefix_AspNetUserLogins prefix_AspNetUserRoles prefix_AspNetUsers

除了这些,我希望我的代码优先创建的所有其他表具有相同的前缀。我怎么能做到这一点?为什么我的代码被忽略了?

1 个答案:

答案 0 :(得分:3)

为什么不使用模式而不是为表添加前缀?

您可以使用以下方法设置默认架构

modelBuilder.HasDefaultSchema("MySchema"); // Replace MySchema with the name of your prefix

要设置每个表的架构,您可以使用

modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName", "MySecondSchema");