微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将范围添加到上下文时,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 举报,一经查实,本站将立刻删除。