c# 4.0 - related - Entity Framework 5 Se han especificado varias columnas de identidad para la tabla. Solo se permite una columna de identidad por tabla
select entity framework c# (5)
Estoy creando este modelo como parte de mi código. Entorno de la entidad.
public class NewUserRegistration
{
[Key]
public int NewUserRegistrationId { get; set; }
}
Utilizando el comando Update-Database -Verbose -Force
en la Update-Database -Verbose -Force
de Paquetes, obtengo esta excepción durante este bit de la actualización Applying automatic migration: 201211252223088_AutomaticMigration.
ALTER TABLE [dbo]. [NewUserRegistration] ADD [NewUserRegistrationId] [int] NOT NULL IDENTITY System.Data.SqlClient.SqlException (0x80131904): Varias columnas de identidad especificadas para la tabla ''NewUserRegistration''. Solo se permite una columna de identidad por tabla. at System.Data.SqlClient.SqlConnection.OnError (es una excepción), una organización de los Estados Unidos,
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
Unidos. .ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) en System.Data.SqlClient.TdsParser.TryRun (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader corriente de datos, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean y DataReady) en System.Data.SqlClient.SqlCommand. RunExecuteNonQueryTds (String methodName, Boolean async, Int32 tiempo de1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
tarea1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
tarea1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
de las personas). .Migrations.Infrastructure.MigratorBase.ExecuteStatements (IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable
11 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable
, Boolean downgrading, Boolean auto.). .DbMigrator.AutoMigrate (String migrationId, XDocument sourceModel, XDocument targetModel, boolean downgrading) en System.Data.Entity.Migrations.Inf. .Migrations.DbMigrator.Upgrade (IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
at System.Data.Entity.Migrations.DbMigrator.Update (String targetMigration) en System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (String targetMigration.Upde.Camino de mesa). () en System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run () ClientConnectionId: a39395da-5f2b-48e0-bdac-b48d75a68c68 Varias columnas de identidad especificadas para la tabla ''NewUserRegistration''. Solo se permite una columna de identidad por tabla.
Es evidente que solo se ha especificado una columna de identidad. Entonces porqué es este el caso?
Cuando hago esto no tengo ninguna excepción.
public class NewUserRegistration
{
[Key]
public int Id { get; set; }
}
¿Alguna idea sobre por qué este es el caso?
EDITAR
Debo decir que estoy cambiando el nombre de la clave. Los comentarios dicen que no puedes simplemente hacer esto. ¿Cómo puedo soltar y recrear?
¿Es mejor eliminar la base de datos de SQL y luego volver a ejecutar el comando Update-Database
?
Encontré el mismo error al intentar cambiar el nombre de una columna de clave. Para hacer que la migración funcionara, tuve que reordenar el orden de las operaciones en mi script de migración con andamiaje.
Aquí, me aseguré de ordenar primero las operaciones de Desconexión, y luego agregué el nuevo campo Clave.
public partial class RenameKey : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.GameSummary", new[] { "OldId" });
DropColumn("dbo.GameSummary", "OldId");
AddColumn("dbo.GameSummary", "Id", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.GameSummary", "Id");
}
Espero que ayude con su caso.
Primero Add-Migration -Name
luego
public override void Up()
{
RenameColumn("dbo.Department", "OldId", "NewId");
}
Solo puedes cambiar el nombre de la columna directamente desde la clase usando algo como esto:
[Column("ProductID")]
Ejemplo:
namespace Z_Market.Models
{
public class Product
{
[Key, Column("ProductID")] //This change the name of the column when you are using migration. If you have a form created already, you have to change the connection in the for to aim the new column name.
public int ID { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public DateTime LastBuy { get; set; }
public float Stock { get; set; }
public string remarks { get; set; }
public string deleteme { get; set; }
public ICollection<SupplierProduct> SupplierProducts { get; set; }
}
}
También tuve un problema similar después de mis primeras migraciones. Lo que me di cuenta fue que después de eliminar la base de datos que creó la primera migración y también eliminar la carpeta de migraciones creada en mi aplicación mvc, el problema no volvió a aparecer.
Tampoco tuve ningún problema simplemente reemplazando los DropPrimaryKey
relevantes DropPrimaryKey
, DropColumn
, AddColumn
y AddPrimaryKey
con un comando RenameColumn
, por ejemplo
public partial class RenameKey : DbMigration
{
public override void Up()
{
RenameColumn("dbo.GameSummary", "OldId", "Id");
}
}