【问题标题】:Asp.Net Core: There is already an object named 'AspNetRoles' in the databaseAsp.Net Core:数据库中已经有一个名为“AspNetRoles”的对象
【发布时间】:2018-10-26 17:38:56
【问题描述】:

我创建了一个新的 Asp.Net Core WebApi 项目并简单地添加了 IdentityDbContext,然后我在 Nuget Package Console 中编写了这些命令:

PM> Add-Migration Initial
To undo this action, use Remove-Migration.
PM> Update-Database
Applying migration '20180516150423_Initial'.
Failed executing DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [AspNetRoles] (
    [Id] nvarchar(450) NOT NULL,
    [ConcurrencyStamp] nvarchar(max) NULL,
    [Name] nvarchar(256) NULL,
    [NormalizedName] nvarchar(256) NULL,
    CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
);
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE [AspNetRoles] (
          [Id] nvarchar(450) NOT NULL,
          [ConcurrencyStamp] nvarchar(max) NULL,
          [Name] nvarchar(256) NULL,
          [NormalizedName] nvarchar(256) NULL,
          CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
      );
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'AspNetRoles' in the database.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
ClientConnectionId:049426b7-c12c-421f-9236-c0212a40c216
Error Number:2714,State:6,Class:16
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'AspNetRoles' in the database.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:049426b7-c12c-421f-9236-c0212a40c216
Error Number:2714,State:6,Class:16
There is already an object named 'AspNetRoles' in the database.
PM> 

Google 云端硬盘项目:https://drive.google.com/open?id=16bYS7br2Ba7NcJYatPBDG2Q921o3MFcK

如果你尝试构建这个项目,你会对我帮助很大。

【问题讨论】:

    标签: asp.net database entity-framework asp.net-core


    【解决方案1】:

    数据库中已经有一个名为“AspNetRoles”的对象

    AspNetRoles 表已经存在。

    你可以尝试两件事:

    1. 登录数据库服务器并运行drop database &lt;your_db_name&gt;
    2. 更改连接字符串中的数据库名称。

    现在Add-Migration &lt;MigrationClassName&gt; 命令可以工作了。

    【讨论】:

    • 但是ef迁移的重点是保留数据?如果我删除数据库,我会丢失所有数据吗?
    • @Genfood ef 迁移的重点是让您在应用程序级别控制数据库架构(及其更改)......除非您:1.删除您的Migrations 文件夹 2. 或者除非您使用旧项目中已使用的连接字符串(在这种情况下,您需要更新连接字符串中的数据库名称)。在开发的初始阶段,通常会删除/重新创建 db 和 Migrations 文件夹,并为其添加测试数据。
    【解决方案2】:

    我遇到了与下面相同的错误。然后我将其修复如下:

    1. 检查项目中的当前数据库: dotnet ef migrations list
    2. 如果您添加的是最新的,则将其删除: dotnet ef migrations remove
    3. 保证此数据库的输出必须在源代码中删除:.cs/.Designer.cs 文件
    4. 现在好了。尝试重新添加: dotnet ef migrations add [new_dbo_name]

    5.最后,尝试再次更新,以迁移列表为基础:

    dotnet ef database update [First]

    dotnet ef database update [Second]

    ...

    dotnet ef database update [new_dbo_name]

    希望对您有所帮助。 ^^

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-01
      • 2017-01-29
      • 2020-11-26
      • 2019-05-12
      • 1970-01-01
      • 2011-03-29
      • 2016-04-08
      • 2010-11-12
      相关资源
      最近更新 更多