【发布时间】:2012-11-25 22:28:50
【问题描述】:
我正在创建这个模型作为我的代码优先实体框架的一部分
public class NewUserRegistration
{
[Key]
public int NewUserRegistrationId { get; set; }
}
在包管理器控制台中使用Update-Database -Verbose -Force 命令我在更新Applying automatic migration: 201211252223088_AutomaticMigration. 期间遇到此异常
ALTER TABLE [dbo].[NewUserRegistration] 添加 [NewUserRegistrationId] [int] NOT NULL IDENTITY System.Data.SqlClient.SqlException (0x80131904): 为表指定了多个标识列 '新用户注册'。每个表只允许一个标识列。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) 在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串 方法名,布尔异步,Int32 超时)在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 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(IEnumerable1 迁移声明)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable1 操作,布尔 降级,布尔自动)在 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(字符串 migrationId, XDocument sourceModel, XDocument targetModel, Boolean 降级)在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(字符串 migrationId, XDocument sourceModel, XDocument targetModel, Boolean 降级)在 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)1 pendingMigrations, 字符串 targetMigrationId, 字符串 lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
在 System.Data.Entity.Migrations.DbMigrator.Update(字符串 目标迁移)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串 目标迁移)在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() ClientConnectionId:a39395da-5f2b-48e0-bdac-b48d75a68c68 多个 为表“NewUserRegistration”指定的标识列。只有一个 允许每个表的标识列。
显然只指定了一个标识列。那为什么会这样呢?
当我这样做时,我没有例外。
public class NewUserRegistration
{
[Key]
public int Id { get; set; }
}
对为什么会这样有什么想法吗?
编辑
我应该说我正在更改密钥的名称。 cmets说你不能这样做。如何删除和重新创建?
最好从 SQL 中删除数据库,然后再次运行 Update-Database 命令?
【问题讨论】:
-
看起来您正在更改现有表。在添加
NewUserRegistrationId之前,您在实体中是否还有其他键?不能简单地更改标识列。 -
是的,那么我如何指示事物删除并重新创建表。