there the mvc aspnetroles already asp.net-mvc entity-framework identity asp.net-identity

asp.net-mvc - the - @model mvc



Ya existe un objeto llamado ''AspNetRoles'' en la base de datos (2)

Si bien puede (desde EF6) usar migraciones en dos proyectos separados para la misma base de datos, no puede haber ninguna superposición. La forma en que funcionan las migraciones es a través de una tabla dbo._MigrationHistory que almacena el contexto que generó la migración y el estado del modelo de su aplicación, que incluye los modelos de Identidad.

Cuando intenta conectar su segunda aplicación, no encuentra migraciones anteriores y, por lo tanto, necesita generar su migración inicial, que incluirá tablas para los modelos de Identidad, que también se encuentran en su contexto. Ahí es donde está tu problema.

Para los propósitos de Identidad, debe elegir un proyecto para hacer el máster. Este utilizará un IdentityDbContext estándar donde se migrarán los modelos de Identidad.

El otro proyecto deberá convertirse en esclavo, al menos en términos de utilización de Identidad. Por lo tanto, deberá interactuar con al menos dos contextos en esta aplicación. Una será una subclase de IdentityDbContext , pero tratada como una base de datos primero:

public class MyIdentityContext : IdentityDbContext<ApplicationUser> { public MyIdentityContext() : base("ConnectionStringNameForYourSharedDB") { Database.SetInitializer<MyIdentityContext>(null); } }

El otro contexto será solo una subclase DbContext regular que se DbContext normalmente. Deberá repetir esto para cualquier otro proyecto que pueda necesitar acceso a la misma información de identidad de la misma base de datos. Además, debido al código repetitivo al que esto conducirá (y al hecho de que su clase ApplicationUser tendrá que compartirse) debe mover este código a una biblioteca de clases a la que cada proyecto pueda hacer referencia.

Hace algún tiempo, creé un sitio web ASP.NET MVC 5 con la versión Identity 1.0, y creé las tablas de identidad con este proyecto. Ahora tengo que hacer otro sitio web usando la misma base de datos para la autenticación, pero ahora la versión de Identity es 2.0. Así que cuando intento autenticar en el nuevo sitio web obtengo algunos errores.

Estoy tratando de migrar la base de datos utilizando el enfoque de Migraciones, pero está confundido y There is already an object named ''AspNetRoles'' in the database. este error. There is already an object named ''AspNetRoles'' in the database. cuando escribo Update-Database en la consola de PM.

Mi pregunta es, ¿cuál es la mejor manera de usar la misma base de datos para la autenticación de ambos sitios (uno con la versión de identidad 1.0 y otro con 2.0)? ¿Realmente necesito migrar la base de datos?

Si es así, ¿cómo puedo solucionar este error que estoy recibiendo?


Add-Migration InitialMigrations -IgnoreChanges

Esto debería generar un archivo "InitialMigration" en blanco. Ahora, agregue cualquier cambio deseado a la clase que desea. Una vez que se agreguen los cambios, ejecute de nuevo el comando de actualización:

update-database -verbose

Ahora se aplicará la migración automática y la tabla se modificará con los cambios.

Edición: Aquí hay una solución para migrar la identidad 1 a 2 Actualizando de ASP.NET.Identity 1.0 a 2.0 Use esta migración manual

public override void Up() { RenameColumn(table: "dbo.AspNetUserClaims", name: "User_Id", newName: "UserId"); RenameIndex(table: "dbo.AspNetUserClaims", name: "IX_User_Id", newName: "IX_UserId"); DropPrimaryKey("dbo.AspNetUserLogins"); AddColumn("dbo.AspNetUsers", "Email", c => c.String(maxLength: 256)); AddColumn("dbo.AspNetUsers", "EmailConfirmed", c => c.Boolean(nullable: false)); AddColumn("dbo.AspNetUsers", "PhoneNumber", c => c.String()); AddColumn("dbo.AspNetUsers", "PhoneNumberConfirmed", c => c.Boolean(nullable: false)); AddColumn("dbo.AspNetUsers", "TwoFactorEnabled", c => c.Boolean(nullable: false)); AddColumn("dbo.AspNetUsers", "LockoutEndDateUtc", c => c.DateTime()); AddColumn("dbo.AspNetUsers", "LockoutEnabled", c => c.Boolean(nullable: false)); AddColumn("dbo.AspNetUsers", "AccessFailedCount", c => c.Int(nullable: false)); AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false, maxLength: 256)); AlterColumn("dbo.AspNetUsers", "FirstName", c => c.String(nullable: false)); AlterColumn("dbo.AspNetUsers", "LastName", c => c.String(nullable: false)); AddColumn("dbo.AspNetUsers", "CreatedDateTime", c => c.DateTime(nullable: false)); AlterColumn("dbo.AspNetRoles", "Name", c => c.String(nullable: false, maxLength: 256)); AddPrimaryKey("dbo.AspNetUserLogins", new[] { "LoginProvider", "ProviderKey", "UserId" }); CreateIndex("dbo.AspNetUsers", "UserName", unique: true, name: "UserNameIndex"); CreateIndex("dbo.AspNetRoles", "Name", unique: true, name: "RoleNameIndex"); DropColumn("dbo.AspNetUsers", "Discriminator"); }