问题描述
我有一个特殊的问题。我想测试应用程序中的几个服务,其中一个直接使用identityDbContext
,所以除了模拟它之外,我几乎没有尝试使用InMemoryDatabase。创建上下文时没有任何问题,但是当我尝试向Dbsets添加内容时会引发错误:
System.MissingMethodException:“未找到方法:'Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder
1.HasIndex(System.Linq.Expressions.Expression
1>)'。”
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 (将#修改为@)