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

时间:2018-01-02 12:32:37

标签: asp.net-mvc asp.net-mvc-4

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

Error   CS1061  'DbContextOptionsBuilder<ProductContext>' does not contain a definition for 'UseInMemoryDatabase' and no extension method 'UseInMemoryDatabase' accepting a first argument of type 'DbContextOptionsBuilder<ProductContext>' 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 个答案:

答案 0 :(得分:21)

根据EF Core: Testing with InMemory引用,您需要添加Microsoft.EntityFrameworkCore.InMemory包以使用UseInMemoryDatabase()的{​​{1}}扩展方法:

DbContextOptionsBuilder

之后,您可以按照&#34;编写测试&#34;中的示例进行操作。这样的部分:

Install-Package Microsoft.EntityFrameworkCore.InMemory

答案 1 :(得分:2)

您需要使用UseInMemoryDatabase

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

答案 2 :(得分: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

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

答案 3 :(得分:1)

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

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

或通过使用包管理器...

工具(菜单)-> NuGet软件包管理器-> 管理解决方案的NuGet软件包-> NuGet(打开的标签)- >搜索“内存”->选择Microsoft.EntityFrameworkCore.InMemory->选中“项目”框-> 安装(按钮) image

Visual Studio代码:通过终端...

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

image

答案 4 :(得分:0)

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

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

dotnet add package Microsoft.EntityFrameworkCore.InMemory