将范围添加到上下文时,Entity Framework Core中的InMemory数据库缺少方法异常

问题描述

我有一个特殊的问题。我想测试应用程序中的几个服务,其中一个直接使用identityDbContext,所以除了模拟它之外,我几乎没有尝试使用InMemoryDatabase。创建上下文时没有任何问题,但是当我尝试向Dbsets添加内容时会引发错误

System.MissingMethodException:“未找到方法:'Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder 1.HasIndex(System.Linq.Expressions.Expression 1 >)'。”

在这部分代码上-准确地在OnModelCreating行。

protected override void OnModelCreating(ModelBuilder builder)
{
        base.OnModelCreating(builder);

        builder.Entity<UserCurrency>()
            .HasKey(uc => new { uc.CurrencyId,uc.UserId });
}

错误发生在最后一行之前,

context.AddRange(testUser,testUserCurrency,testCurrency);

private DBContext CreateInMemoryDBContext()
{
        var options = new DbContextOptionsBuilder<DBContext>()
              .UseInMemoryDatabase(Guid.NewGuid().ToString())
              .Options;

        var context = new DBContext(options);

        User testUser = new User()
        {
            UserName = "Mark",Id = "1",UserFavoriteCurrencies = new List<UserCurrency>()
        };
        UserCurrency testUserCurrency = new UserCurrency()
        {
            CurrencyId = 1,Currency = null,UserId = testUser.Id,User = testUser,};

        Currency testCurrency = new Currency()
        {
            Id = 1,Name = "USD",FavoritedByUsers = new List<UserCurrency> { testUserCurrency }
        };

        context.AddRange(testUser,testCurrency);

        return context;
}

这是我的csproj

<Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netcoreapp2.1</TargetFramework>
        <IsPackable>false</IsPackable>
      </PropertyGroup>
    
      <ItemGroup>
        <packagereference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
        <packagereference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0"                 />
        <packagereference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.8" />
        <packagereference Include="Microsoft.Extensions.Identity.Stores" Version="2.2.0" />
        <packagereference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
        <packagereference Include="MockQueryable.Core" Version="3.1.3" />
        <packagereference Include="MockQueryable.Moq" Version="3.1.3" />
        <packagereference Include="Moq" Version="4.14.3" />
        <packagereference Include="NSubstitute" Version="4.2.2" />
        <packagereference Include="xunit" Version="2.4.1" />
        <packagereference Include="xunit.runner.visualstudio" Version="2.4.2">
          <PrivateAssets>all</PrivateAssets>
          <IncludeAssets>runtime; build; native; contentfiles; analyzers;         buildtransitive</IncludeAssets>
        </packagereference>
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\BusinessLogic\BusinessLogic.csproj" />
      </ItemGroup>
</Project>

我已经尝试过更改软件包的版本-如果我的内存不足,则根本无法使用。可能是什么问题?

PS。这是来自引用的BusinessLogic项目的csproj的一部分。

<ItemGroup>
<packagereference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<packagereference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
<packagereference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0" />
<packagereference Include="Microsoft.EntityFrameworkCore.sqlServer" Version="2.2.4" />
<packagereference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</packagereference>
<packagereference Include="Microsoft.Extensions.Identity.Stores" Version="2.2.0" />
<packagereference Include="Serilog.Sinks.Console" Version="3.1.1" />
<packagereference Include="Serilog.Sinks.File" Version="4.0.0" />
<packagereference Include="Serilog.Sinks.Loggly" Version="5.3.0" />
<packagereference Include="SharpZipLib" Version="1.2.0" />
<packagereference Include="X.PagedList" Version="7.6.0" />
<packagereference Include="X.PagedList.Mvc.Core" Version="7.6.0" />

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)