我在现有的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
时,我收到以下错误信息:
我不太确定这意味着什么,因为我没有在数据库上下文文件中改变其他任何东西。 我只是添加了新的模型。fail: Microsoft.EntityFrameworkCore.Database.Command[200102]
Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER TABLE [ApplicationUserToken] DROP CONSTRAINT [FK_ApplicationUserToken_AspNetUsers_UserId];
System.Data.SqlClient.SqlException (0x80131904): Cannot find the object "ApplicationUserToken" because it does not exist or you do not have permissions.at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction)
1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
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(TaskCompletionSource1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
2 parameterValues)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary
编辑:
所以我有一个函数,在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并不能解决问题。似乎无法找出问题所在。