试图更改Asp.net标识表MVC5的名称

时间:2014-10-27 04:26:32

标签: c# asp.net-mvc-5 asp.net-identity

我想更改ap.net身份表的默认名称。我心里几乎没有问题

1)如果表已经创建并且有一些数据

,那么这是可能的吗?

2)我们可以只更改表的名称并保持数据的原样

我试过这段代码:

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

    modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
    modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
    modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
    modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
    modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
    modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}

但是它抛出我的模型支持上下文已经改变了错误

The model backing the 'ApplicationDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database

2 个答案:

答案 0 :(得分:0)

如错误所示,您应为Asp.Net Identity Application DbContext启用Migration以反映对数据库的更改。 要开始在项目中使用迁移,请转到工具 - &gt;在Visual Studio中选择菜单,然后选择Library Package Manager-&gt;包管理器控制台。当控制台在屏幕底部打开时,键入:

Enable-Migrations –EnableAutomaticMigrations

一旦我们运行了如上所述的Enable-Migrations命令,我们项目的根目录下应该有一个Migrations文件夹。如果我们在该文件夹中打开Configuration.cs文件:

namespace DbMigrationExample.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration 
        : DbMigrationsConfiguration<DbMigrationExample.Models.ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }

        protected override void Seed(
            DbMigrationExample.Models.ApplicationDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
    }
}

有关更多信息,请参阅以下文章: Code-First Migration and Extending Identity Accounts in ASP.NET MVC 5 and Visual Studio 2013

答案 1 :(得分:0)

您可能想要禁用初始值设定项。我把它关掉了,因为我更喜欢维护我的数据库和代码。 例如。

Database.SetInitializer<Entities>( null );

如果需要,您还可以保留模型名称,并在模型中明确指定表名称,例如:

[Table( "NewTableName" )]
internal class OldTableName
{
    ....
}