C# 和 EntityFramworkCore:运行“$ dotnet ef 数据库更新”后出错。:对象引用未设置到对象的实例

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

我正在使用数据库实体框架构建一个网站,在简单地重命名一个字段并删除另一个字段后出现此错误

这是最后添加的迁移:

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.
c# .net database entity-framework-core
1个回答
0
投票

对于遇到相同问题的任何人,我仍然不确定原始问题到底是什么,但当我尝试重命名字段时发生了错误。解决方案是删除它并重新添加它

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