将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
除了这些,我希望我的代码优先创建的所有其他表具有相同的前缀。我怎么能做到这一点?为什么我的代码被忽略了?
答案 0 :(得分:3)
为什么不使用模式而不是为表添加前缀?
您可以使用以下方法设置默认架构
modelBuilder.HasDefaultSchema("MySchema"); // Replace MySchema with the name of your prefix
要设置每个表的架构,您可以使用
modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName", "MySecondSchema");