asp.net 实体框架迁移错误

ehxuflar  于 2022-11-26  发布在  .NET
关注(0)|答案(4)|浏览(183)

我在现有的SQL Server数据库中添加了一个新表。我使用它生成的ID作为键。我运行了dotnet ef migration add NewTable,运行时没有出现错误。我查看了迁移文件,下面是为新表添加的内容:

migrationBuilder.CreateTable(
                name: "InboxNotifications",
                columns: table => new
                {
                    Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
                    Created = table.Column<DateTime>(type: "datetime2", nullable: false),
                    CreatedBy = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    DataId = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    EventIdent = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Message = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Status = table.Column<int>(type: "int", nullable: false),
                    TeamIdent = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Title = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Type = table.Column<int>(type: "int", nullable: false),
                    UserId = table.Column<string>(type: "nvarchar(max)", nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_InboxNotifications", x => x.Id);
                });

现在,当我运行dotnet ef database update时,我得到这个错误:
失败:Microsoft.实体框架核心.数据库.命令[200102]
无法执行DbCommand(1毫秒)[参数=[],命令类型=“文本”,命令超时=“30”]
删除约束条件;
异常(0x 80131904):找不到对象“ApplicationUserToken”,因为该对象不存在或您没有权限。
(SqlException例外状况,布林值中断连接,动作1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)
在系统.数据.SqlClient.TdsParser.抛出异常和警告(TdsParserStateObject状态对象,布尔值调用方有连接锁,布尔值异步关闭)
在系统.数据.SqlClient.TdsParser.TryRun(运行行为运行行为,SqlCommand命令处理程序,SqlDataReader数据流,批量复制简单结果集批量复制处理程序,TdsParserStateObject状态对象,布尔值&数据就绪)
在系统.数据.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名称,布尔值异步,Int 32超时,布尔值异步写入)
在系统.数据.SqlClient.SqlCommand.内部执行非查询(工作完成来源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参数值)
我不太清楚这意味着什么,因为我没有在我的数据库上下文文件中更改任何其他内容,我只是添加了新的模型。
编辑:
所以我在startup.cs的Configure()中调用了这个函数:
`

public virtual void EnsureDatabaseCreated(TennisFolderContext dbContext,
                              UserManager<ApplicationUser> userManager,
                              RoleManager<ApplicationRole> roleManager,
                              bool createData)
        {

            // run Migrations
            DbInitializer.Initialize(dbContext, userManager, roleManager, createData).Wait();
        }

`
根据https://learn.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/
将它移到program.cs并没有修复它。看起来不知道发生了什么。

byqmnocz

byqmnocz1#

给定的代码未指示ApplicationUserToken中的任何更改。因此,请确保连接到同一数据库(验证上下文文件)。检查是否已调用初始化DBContext。

qacovj5a

qacovj5a2#

我找到了这个问题的解决方案,只需创建新的数据库并执行命令“add-migration migrationame”,然后从软件包管理器控制台更新数据库。

goqiplq2

goqiplq23#

问题在于,由于某种原因,您的迁移引用了尚未创建或删除的约束。
要解决这个
1.请检查数据库(_EFMigrationsHistory)上的迁移历史记录表,以了解上次成功的迁移。
1.转到解决方案中的迁移文件夹,检查在上次成功迁移后添加的迁移。
1.此错误最像是来自尝试卸除FK_ApplicationUserToken_AspNetUsers_UserId的陈述式,通常撰写如下:
删除外键(名称:“FK_应用程序用户令牌_AspNetUsers_用户ID”,表:“您的表”)
1.您可以对此语句添加注解或将其删除
1.尝试再次更新数据库

ikfrs5lh

ikfrs5lh4#

为此,请首先确保您已正确写入数据文件。如果正确,则在软件包管理器控制台中运行迁移文件,即
命令:Add-Migration Migration_name(如果您的解决方案资源管理器中有migrations文件夹,则首先删除该文件夹并运行此命令)
在此之后运行另一个命令命令:更新数据库(这将有助于同步代码与sql服务器,并在数据库中创建一个表)
在此之后,打开TERMINAL,然后运行以下命令
首先检查wethere你在你的项目只意味着你应该看到项目的文件夹当你运行“dir”命令(这可以通过执行以下命令看到)
command:dir如果不在项目目录中,则切换到项目,即command:cd项目名称,然后命令:dotnet运行种子数据
参考:YouTube视频链接:https://www.youtube.com/watch?v=EmV_IBYIlyo&list=PL82C6-O4XrHdiS10BLh23x71ve9mQCln0&index=5

相关问题