我在try 初始化数据库时遇到问题.在我的应用程序中,我有两个DbContext,标识DbContext和Auctionhouse DbContext,它们都使用相同的数据库,但使用不同的模式.当我try 使用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);
    }
}

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

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>

Directory.Build.props人看起来是这样的:

<Project>
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

我还找不到任何不匹配的地方.除了NSWAG,我已经安装了每个包的所有最新预发行版.

推荐答案

基于文档的DbBatchCommand.CreateParameter是在.NET8中引入的,所以您似乎有一些包/运行时版本不匹配的问题.判断是否安装了EF Core、Npgsql.EntityFrameworkCore.PostgreSQLMicrosoft.AspNetCore.Identity.EntityFrameworkCore的匹配版本,并且您正在使用相应的SKD/运行时(例如,对于.NET8-具有匹配的包版本的最新候选发布版本-RC2).

再勾选MissingMethodException in Integration test with sqlite美元.

UPD.

虽然我使用了dotnet ef工具(来自src文件夹),但您的项目在.NET 8 RC 2的情况下运行得很好:

dotnet ef database update -s WebApi/WebApi.csproj -p Identity/Identity.Infrastructure/Identity.Infrastructure.csproj -c IdentityDbContext

判断您是否安装了最新的候选版本.

Csharp相关问答推荐

如何使用Unity和MRTK3将手网添加到Hololens 2应用程序中

有没有办法把+02:00转换成TimeSpan?""

在. NET Core 8 Web API中,当为服务总线使用通用消费者时,如何防止IServiceProvider被释放或空?"

Polly v8—使用PredicateBuilder重试特定的状态代码

如何在没有额外副本的情况下将存储在IntPtr下的原始图像数据写入WinUI3中的Image控件?

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

如何在Parall.ForEachAsync中使用CancerationTokenSource

Appsettings.json未加载.Net 8 Blaazor Web程序集

从依赖项容器在.NET 8中的Program.cs文件中添加IOC

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

net中从位图获取坐标和绘制折线

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

等待一个等待函数

记录类型';==运算符是否与实现IEquatable<;T&>;的类中的';equals&>方法执行等价比较?

获取混淆&Quot;模糊引用&Quot;错误

使用可空引用类型时C#接口实现错误

如何使用LINQ在C#中填充列表列表?

在.Net 8 Visual Studio 2022中启用本机AOT发布时发布失败

C#中的逻辑运算符用作单词';is';and';and';