为什么我不能在DbContextOptionsBuilder上调用UseInMemoryDatabase方法?

147

首先,我不能使用SQL Lite。其次,下面的代码导致了以下错误:

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>

确切的问题是该方法不可用。我似乎不明白为什么。我需要在这个问题上得到启示。

5个回答

324
根据EF Core: Testing with InMemory参考文献,您需要添加Microsoft.EntityFrameworkCore.InMemory软件包,以便在DbContextOptionsBuilder中使用UseInMemoryDatabase()扩展方法.
Install-Package Microsoft.EntityFrameworkCore.InMemory

之后,您可以像这样遵循“编写测试”部分中给出的示例:

var options = new DbContextOptionsBuilder<ProductContext>().UseInMemoryDatabase(databaseName: "database_name").Options;

using (var context = new ProductContext(options))
{
    // add service here
}

13
CLI命令是:dotnet add package Microsoft.EntityFrameworkCore.InMemory - Jose V

15

Visual Studio 2019: 通过控制台...

工具(菜单) -> NuGet程序包管理器 -> 程序包管理器控制台,然后输入dotnet add package Microsoft.EntityFrameworkCore.InMemory

image

或者通过NuGet程序包管理器...

工具(菜单) -> NuGet程序包管理器 -> 解决方案的NuGet程序包管理器 -> NuGet(打开的选项卡) -> 搜索"inmemory" -> 选择Microsoft.EntityFrameworkCore.InMemory -> 勾选项目 -> 安装(按钮)

image

Visual Studio CODE: 通过终端...

在屏幕底部选择 终端(选项卡),然后输入dotnet add package Microsoft.EntityFrameworkCore.InMemory

image


13

你需要它来使用UseInMemoryDatabase

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0" />
</ItemGroup>

10

在 Mac 中,打开项目目录中的终端或在 Visual Studio 中右键点击项目 -> 工具 -> 在终端中打开

在终端中通过以下命令安装软件包 ->

dotnet add package Microsoft.EntityFrameworkCore.InMemory

0
请在您的NuGet包管理器=>解决方案管理包中检查所有这些包,看看它们是否已经安装在您的解决方案中,如下所示:
  1. EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.InMemory
  4. Microsoft.EntityFrameworkCore.Relational
  5. Microsoft.EntityFrameworkCore.Sqlite.Core
  6. Microsoft.EntityFrameworkCore.SqlServer
  7. Microsoft.EntityFrameworkCore.Tools

在检查了所有上述的软件包是否已安装后,我解决了相同的问题。


3
我认为我们不需要在同一个项目中使用所有这些。只需使用Microsoft.EntityFrameworkCore.InMemory就足够了。 - Soundararajan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接