为什么我不能在 DbContextOptionsBuilder 上调用 UseInMemoryDatabase 方法?
Why can't I call the UseInMemoryDatabase method on DbContextOptionsBuilder?
首先,我无法使用 SQL 精简版。其次,下面的代码给了我:
Error CS1061 'DbContextOptionsBuilder' does not contain a definition for 'UseInMemoryDatabase' and no extension method 'UseInMemoryDatabase' accepting a first argument of type 'DbContextOptionsBuilder' could be found (are you missing a using directive or an assembly reference?)
代码:
var options = new DbContextOptionsBuilder<ProductContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new ProductContext(options);
上下文
using Memory.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace Memory.Data
{
public class ProductContext : DbContext
{
public ProductContext(DbContextOptions<ProductContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
}
我的项目CSPROJ文件
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.6" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.3" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.3" />
</ItemGroup>
确切的问题是该方法不可用。我似乎不明白为什么。我需要关于这个问题的启发。
根据 EF Core: Testing with InMemory reference, you need to add the Microsoft.EntityFrameworkCore.InMemory 包使用 UseInMemoryDatabase()
扩展方法 DbContextOptionsBuilder
:
Install-Package Microsoft.EntityFrameworkCore.InMemory
之后,您可以按照 "Writing tests" 部分中给出的示例进行操作,如下所示:
var options = new DbContextOptionsBuilder<ProductContext>().UseInMemoryDatabase(databaseName: "database_name").Options;
using (var context = new ProductContext(options))
{
// add service here
}
您需要它才能使用 UseInMemoryDatabase
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0" />
</ItemGroup>
检查你的 NuGet Package Manager => Manage Packages for Solution,检查所有这些包,是否得到 是否在您的解决方案中安装,如下所示:
- EntityFrameworkCore
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.InMemory
- Microsoft.EntityFrameworkCore.关系
- Microsoft.EntityFrameworkCore.Sqlite.Core
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.工具
检查以上所有包都安装后,我解决了同样的问题。
Visual Studio 2019:通过控制台...
工具(菜单)-> NuGet 包管理器 -> 包管理器控制台 然后输入 dotnet add package Microsoft.EntityFrameworkCore.InMemory
或者使用包管理器...
工具(菜单)-> NuGet 包管理器-> 管理解决方案的 NuGet 包 -> NuGet(打开的选项卡) -> 搜索“inmemory” -> Select Microsoft.EntityFrameworkCore.InMemory -> 勾选项目 -> Install(按钮)
Visual Studio代码:通过终端...
在屏幕底部,select 终端(选项卡)然后键入 dotnet add package Microsoft.EntityFrameworkCore.InMemory
在Mac中,在项目目录中打开终端或者在Visual Studio中右键单击项目-> 工具 -> 在终端中打开。
在终端中通过以下命令安装包->
dotnet add package Microsoft.EntityFrameworkCore.InMemory
首先,我无法使用 SQL 精简版。其次,下面的代码给了我:
Error CS1061 'DbContextOptionsBuilder' does not contain a definition for 'UseInMemoryDatabase' and no extension method 'UseInMemoryDatabase' accepting a first argument of type 'DbContextOptionsBuilder' could be found (are you missing a using directive or an assembly reference?)
代码:
var options = new DbContextOptionsBuilder<ProductContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new ProductContext(options);
上下文
using Memory.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace Memory.Data
{
public class ProductContext : DbContext
{
public ProductContext(DbContextOptions<ProductContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
}
我的项目CSPROJ文件
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.6" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.3" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.3" />
</ItemGroup>
确切的问题是该方法不可用。我似乎不明白为什么。我需要关于这个问题的启发。
根据 EF Core: Testing with InMemory reference, you need to add the Microsoft.EntityFrameworkCore.InMemory 包使用 UseInMemoryDatabase()
扩展方法 DbContextOptionsBuilder
:
Install-Package Microsoft.EntityFrameworkCore.InMemory
之后,您可以按照 "Writing tests" 部分中给出的示例进行操作,如下所示:
var options = new DbContextOptionsBuilder<ProductContext>().UseInMemoryDatabase(databaseName: "database_name").Options;
using (var context = new ProductContext(options))
{
// add service here
}
您需要它才能使用 UseInMemoryDatabase
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0" />
</ItemGroup>
检查你的 NuGet Package Manager => Manage Packages for Solution,检查所有这些包,是否得到 是否在您的解决方案中安装,如下所示:
- EntityFrameworkCore
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.InMemory
- Microsoft.EntityFrameworkCore.关系
- Microsoft.EntityFrameworkCore.Sqlite.Core
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.工具
检查以上所有包都安装后,我解决了同样的问题。
Visual Studio 2019:通过控制台...
工具(菜单)-> NuGet 包管理器 -> 包管理器控制台 然后输入 dotnet add package Microsoft.EntityFrameworkCore.InMemory
或者使用包管理器...
工具(菜单)-> NuGet 包管理器-> 管理解决方案的 NuGet 包 -> NuGet(打开的选项卡) -> 搜索“inmemory” -> Select Microsoft.EntityFrameworkCore.InMemory -> 勾选项目 -> Install(按钮)
Visual Studio代码:通过终端...
在屏幕底部,select 终端(选项卡)然后键入 dotnet add package Microsoft.EntityFrameworkCore.InMemory
在Mac中,在项目目录中打开终端或者在Visual Studio中右键单击项目-> 工具 -> 在终端中打开。
在终端中通过以下命令安装包->
dotnet add package Microsoft.EntityFrameworkCore.InMemory