首页 > 解决方案 > EF Core 迁移失败,表已创建

问题描述

这是我的 DbContext 类

public class BlogContext : DbContext
{
    public BlogContext (DbContextOptions<BlogContext> options)
        : base(options)
    { }
    public DbSet<User> Users { get; set; }
    public DbSet<Post> Posts { get; set; }
    public DbSet<Comment> Comments  { get; set; }
}

这是我输入到 nugget 控制台的命令,直到出现错误

PM> add-migration AddNotNull
EF Core 工具版本“2.1.1-rtm-30846”比运行时“2.1.3-rtm-32065”的版本旧。更新工具以获取最新功能和错误修复。Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 2.1.3-rtm-32065 使用提供程序“Microsoft.EntityFrameworkCore.SqlServer”初始化“BlogContext”,选项:无 要撤消此操作,请使用移除迁移。
PM> 更新数据库
EF Core 工具版本“2.1.1-rtm-30846”比运行时“2.1.3-rtm-32065”旧。更新工具以获取最新功能和错误修复。Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 2.1.3-rtm-32065 使用提供程序“Microsoft.EntityFrameworkCore.SqlServer”初始化“BlogContext”,选项:无 Microsoft.EntityFrameworkCore.Database.Command[20101] 执行 DbCommand (11ms) [参数=[],CommandType='Text',CommandTimeout='30'] SELECT OBJECT_ID(N'[__EFMigrationsHistory]'); Microsoft.EntityFrameworkCore.Database.Command[20101] 执行 DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[__EFMigrationsHistory]'); 应用迁移“20181113132251_AddNotNull”。Microsoft.EntityFrameworkCore.Database.Command[20101] 执行 DbCommand (7ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [MigrationId], [ProductVersion] FROM [__EFMigrationsHistory] ​​ORDER BY [MigrationId] ; Microsoft.EntityFrameworkCore.Migrations[20402] 正在应用迁移“20181113132251_AddNotNull”。执行 DbCommand (5ms) 失败 [Parameters=[], CommandType='Text', CommandTimeout='30'] [ProductVersion] FROM [__EFMigrationsHistory] ​​ORDER BY [MigrationId]; Microsoft.EntityFrameworkCore.Migrations[20402] 正在应用迁移“20181113132251_AddNotNull”。执行 DbCommand (5ms) 失败 [Parameters=[], CommandType='Text', CommandTimeout='30'] [ProductVersion] FROM [__EFMigrationsHistory] ​​ORDER BY [MigrationId]; Microsoft.EntityFrameworkCore.Migrations[20402] 正在应用迁移“20181113132251_AddNotNull”。执行 DbCommand (5ms) 失败 [Parameters=[], CommandType='Text', CommandTimeout='30']

CREATE TABLE [Users] (
[IDUser] int NOT NULL IDENTITY,
[Username] nvarchar(max) NOT NULL,
[Password] nvarchar(max) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY ([IDUser]));

System.Data.SqlClient.SqlException (0x80131904):数据库中已经有一个名为“用户”的对象。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,操作1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔 callerHasConnectionLock,布尔 asyncClose)在 System.Data.SqlClient.TdsParser。在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名,布尔异步,Int32 超时,布尔异步写入)在 System.Data.SqlClient 的 TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady)。 SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 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, IReadOnlyDictionaryMicrosoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection 连接,IReadOnlyDictionary 的 2 个参数值)2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) 在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection) .UpdateDatabase(String targetMigration, String contextType) 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) ClientConnectionId:123d7ce8 -1ece-4ad9-aa48-bd44c7179be1 错误编号:2714,状态:6,类:16 数据库中已经有一个名为“用户”的对象。

我所做的只是将 [Required()] 添加到我的大部分字段中。并对格式感到抱歉。SO认为create table是这个引用中的一个代码块..

编辑:问题的答案是 Database.EnsureCreated() 方法在没有任何迁移、任何禁用(拒绝?)迁移的情况下创建数据库,所以这就是我无法创建任何迁移的原因。

标签: c#ef-core-2.1

解决方案


推荐阅读