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


85

首先,我不能使用SQL Lite。其次,下面的代码给了我:

错误CS1061'DbContextOptionsBuilder'不包含'UseInMemoryDatabase'的定义,并且找不到扩展方法'UseInMemoryDatabase'接受类型为'DbContextOptionsBuilder'的第一个参数(是否缺少using指令或程序集引用?)

编码:

 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>

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

Answers:


207

根据EF Core:使用InMemory测试参考,您需要添加Microsoft.EntityFrameworkCore.InMemory包以将UseInMemoryDatabase()扩展方法与结合使用DbContextOptionsBuilder

Install-Package Microsoft.EntityFrameworkCore.InMemory

然后,您可以按照以下“书写测试”部分中给出的示例进行操作:

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

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

6
cli命令为: dotnet add package Microsoft.EntityFrameworkCore.InMemory
Jose V


1

签入您的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

检查以上所有软件包后,我解决了相同的问题。


我认为对于同一项目,我们不需要所有这些。仅Microsoft.EntityFrameworkCore.InMemory就足够了。
Soundararajan

1

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

工具(菜单)-> NuGet软件包管理器->软件包管理器控制台,然后键入dotnet add package Microsoft.EntityFrameworkCore.InMemory 图片

或使用包管理器...

工具(菜单)-> NuGet软件包管理器->管理解决方案的NuGet软件包-> NuGet(打开的选项卡)->搜索“内存”->选择Microsoft.EntityFrameworkCore.InMemory->选中项目Project-> Install(按钮) 图片

Visual Studio CODE:通过终端...

在屏幕底部,选择终端(标签),然后键入dotnet add package Microsoft.EntityFrameworkCore.InMemory

图片


0

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

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

dotnet add package Microsoft.EntityFrameworkCore.InMemory
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.