我正在使用数据库实体框架构建一个网站,在简单地重命名一个字段并删除另一个字段后出现此错误
这是最后添加的迁移:
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Server.Migrations
{
/// <inheritdoc />
public partial class SmallChanges : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "Balace",
table: "accounts",
newName: "Balance");
migrationBuilder.AddColumn<float>(
name: "Price",
table: "CurrentStock",
type: "float",
nullable: false,
defaultValue: 0f);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Price",
table: "CurrentStock");
migrationBuilder.RenameColumn(
name: "Balance",
table: "accounts",
newName: "Balace");
}
}
}
然后数据库中有三个表,如下所示:
public class Order
{
public Guid Id { get; set; }
public Item OrderItem { get; set; }
public String Adress { get; set; }
public DateTime Date { get; set; }
public Order()
{
Id = Guid.NewGuid();
Date = DateTime.Now;
}
}
public class Item
{
public string Name { get; set; }
public int Stock { get; set; }
public string? Buyer { get; set; }
public Guid Id { get; set; }
public float Price { get; set; }
public DateTime Date { get; set; }
public Item()
{
Price = 0.0f;
Date = DateTime.Now;
Id = Guid.NewGuid();
}
}
public class Account
{
public Guid Id { get; set; }
public string FirstName {get; set;}
public string LastName {get; set;}
public string Email {get; set;}
public string Password {get; set;}
public double Balance {get; set;}
public DateTime Date {get; set;}
public Account()
{
this.Id = Guid.NewGuid();
this.Date = DateTime.Now;
}
}
我认为问题可能出在订单类中的 Item 引用,但它在上次迁移之前有效。我不太确定我应该在这里做什么。
我尝试运行数据库更新,也尝试删除和读取迁移,但遇到了同样的问题。我还尝试查看迁移类以查看是否有任何问题,但一切看起来都应该有效。
这是完整的错误:
Build started...
Build succeeded.
The Entity Framework tools version '7.0.9' is older than that of the runtime '7.0.11'. Update the tools for the latest features and bug fixes. See https://aka.ms/AAc1fbw for more information.
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='MandAMarketplace' AND TABLE_NAME='__EFMigrationsHistory';
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='MandAMarketplace' AND TABLE_NAME='__EFMigrationsHistory';
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `MigrationId`, `ProductVersion`
FROM `__EFMigrationsHistory`
ORDER BY `MigrationId`;
info: Microsoft.EntityFrameworkCore.Migrations[20402]
Applying migration '20240507231333_SmallChanges'.
Applying migration '20240507231333_SmallChanges'.
System.NullReferenceException: Object reference not set to an instance of an object.
at MySql.EntityFrameworkCore.Migrations.MySQLMigrationsSqlGenerator.Generate(RenameColumnOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.<>c.<.cctor>b__82_22(MigrationsSqlGenerator g, MigrationOperation o, IModel m, MigrationCommandListBuilder b)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at MySql.EntityFrameworkCore.Migrations.MySQLMigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model, MigrationsSqlGenerationOptions options)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(Migration migration, MigrationsSqlGenerationOptions options)
at MySql.EntityFrameworkCore.Migrations.Internal.MySQLMigrator.GenerateUpSql(Migration migration, MigrationsSqlGenerationOptions options)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.<>c__DisplayClass16_2.<GetMigrationCommandLists>b__2()
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)
Object reference not set to an instance of an object.
对于遇到相同问题的任何人,我仍然不确定原始问题到底是什么,但当我尝试重命名字段时发生了错误。解决方案是删除它并重新添加它