asp.net-mvc - 为 EF6 中的所有表名称添加前缀

标签 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

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

最佳答案

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

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

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

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

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

关于asp.net-mvc - 为 EF6 中的所有表名称添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706377/

相关文章:

javascript - Browserify 和 ReactJs.Net 服务器端渲染

asp.net-mvc - 使用 ViewModel 屏蔽可为 null 的域属性

asp.net - 微软考试: Storing global information in mvc application

entity-framework - 删除代码首先迁移并降级到旧状态

javascript - cultureinfo 问题 - 添加语言

asp.net-mvc - 将 Action 渲染到字符串

c# - 带有LoadAsync()的Query()不会返回实体,尽管它应该

entity-framework - EF6 代码第一个 : How to load DbCompiledModel from EDMX file on startup?

c# - 将实体(和相应的表)添加到 EF DB-first 模型

asp.net-mvc - 如何通过LINQ表达式从数据库中获取处于特定角色的所有应用程序用户的列表?