asp .net core 中数据库错误中已经存在一个名为“Account”的对象

问题描述 投票:0回答:2

我正在尝试使用以下代码迁移模型中的更改

Add-Migration "InitialCreate"

执行此命令后将创建迁移文件。

我尝试执行以下命令。

Update-Database

但是,我收到此错误:

PM> Update-Database
Build started...
Build succeeded.
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (24ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE [Account] (
          [id] int NOT NULL IDENTITY,
          [payable_amount] varchar(15) NULL,
          [balance_amount] varchar(15) NULL,
          [created_at] datetime NOT NULL,
          [updated_at] datetime NOT NULL,
          [deleted_at] datetime NULL,
          CONSTRAINT [PK_Account] PRIMARY KEY ([id])
      );
Failed executing DbCommand (24ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [Account] (
    [id] int NOT NULL IDENTITY,
    [payable_amount] varchar(15) NULL,
    [balance_amount] varchar(15) NULL,
    [created_at] datetime NOT NULL,
    [updated_at] datetime NOT NULL,
    [deleted_at] datetime NULL,
    CONSTRAINT [PK_Account] PRIMARY KEY ([id])
);
Microsoft.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Account' in the database.
   at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean isAsync, Int32 timeout, Boolean asyncWrite)
   at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName)
   at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   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 connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:1807d8da-31e6-4318-889f-77fff0e3ac25
Error Number:2714,State:6,Class:16
There is already an object named 'Account' in the database.

我已按照给定的链接进行操作,但没有帮助。

链接:Update-Database 命令在 ASP.Net Core / Entity Framework Core 中不起作用,因为数据库中的对象已存在

数据库中已存在一个名为的对象

仅供参考:我已撤消数据模型中的所有更改并尝试了上述过程,但仍然出现相同的错误。

c# sql-server entity-framework asp.net-core migration
2个回答
0
投票

(这个问题很旧,但答案可能对其他人有帮助。)

发生错误是因为您有一个数据库并尝试在其中添加已存在的表。

因为您处于开发的早期阶段,所以简单的解决方案是删除数据库并再次调用

update-database
以使用上次迁移重新构建数据库。

此外,根据我在评论中读到的内容,您可能已经开始使用 EF“数据库优先”方法,然后切换到“代码优先”。这是不可取的,因为它会让 EF 处于混乱状态。如果是这种情况,您将需要回溯,选择这两种方法之一,并在模型的整个生命周期中坚持使用它。


0
投票

我找到了解决方案。如果您从现有数据库进行脚手架,那么您希望通过更改连接字符串来更新用于创建的数据库 Now One 现在

  1. 搭建完后打开ApplicationDbContext

  2. 然后你发现OnConfiguring

  3. 评论这个 // protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)//=> optionsBuilder.UseSqlServer("connectionString");

  4. 现在更改 ConnectionString 然后就可以了

    更新数据库

© www.soinside.com 2019 - 2024. All rights reserved.