使用 EntityFrameworkCore 和不同架构初始化数据库时出现 System.MissingMethodException

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

我在尝试初始化数据库时遇到问题。我的应用程序中有两个 DbContext,即 IdentityDbContext 和 AuctionhouseDbContext,它们都使用相同的数据库但使用不同的架构。当我尝试使用

Update-Database -Context IdentityDbContext
命令初始化数据库时,出现以下异常:

System.MissingMethodException: Method not found: 'System.Data.Common.DbParameter System.Data.Common.DbBatchCommand.CreateParameter()'.
   at Npgsql.NpgsqlCommand..ctor(String cmdText, NpgsqlConnection connection)
   at Npgsql.NpgsqlCommand.CreateCachedCommand(NpgsqlConnection connection)
   at Npgsql.NpgsqlConnection.CreateCommand()
   at Npgsql.NpgsqlConnection.CreateDbCommand()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Create()
   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)
Method not found: 'System.Data.Common.DbParameter System.Data.Common.DbBatchCommand.CreateParameter()'.

以下是涉及组件的相关代码:

public class IdentityDbContext 
    : IdentityDbContext<ApplicationUser, IdentityRole<Guid>, Guid>
{
    public const string Schema = "identity";

    public IdentityDbContext(
        DbContextOptions<IdentityDbContext> options) 
        : base(options) { }

    protected override void OnModelCreating(
        ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema(Schema);

        base.OnModelCreating(modelBuilder);
    }
}

ServiceCollectionExtensions.cs
文件配置 DbContext,如下所示:

var connectionString = configuration.GetConnectionString("IdentityConnection");

services.AddDbContext<IdentityDbContext>(options =>
{
    options.UseNpgsql(connectionString, options =>
    {
        options.MigrationsHistoryTable(
            tableName: HistoryRepository.DefaultTableName,
            schema: IdentityDbContext.Schema);
    });
});

任何关于如何在迁移创建过程中解决此问题的帮助或指导将不胜感激。谢谢!


Directory.Packages.props
文件如下所示:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0-rc.2.23480.2" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0-rc.2.23480.1" />
    <PackageVersion Include="NSwag.AspNetCore" Version="13.20.0" />
    <PackageVersion Include="NSwag.MSBuild" Version="13.20.0" />
    <PackageVersion Include="MediatR" Version="12.1.1" />
    <PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.0-rc.2.23480.2" />
    <PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.0-rc.2.23480.2" />
    <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-rc.2" />
  </ItemGroup>
</Project>
c# entity-framework-core npgsql
1个回答
0
投票

根据文档

DbBatchCommand.CreateParameter
是在 .NET 8 中引入的,所以看来您有一些包/运行时版本不匹配。检查是否安装了 EF Core、Npgsql.EntityFrameworkCore.PostgreSQLMicrosoft.AspNetCore.Identity.EntityFrameworkCore 的匹配版本,并且您正在使用相应的 SKD/运行时(例如,对于 .NET 8 - 具有匹配的最新候选版本)软件包版本 - rc2).

还检查 与 sqlite 集成测试中的 MissingMethodException .

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