【问题标题】:Why can't I call the UseInMemoryDatabase method on DbContextOptionsBuilder?为什么我不能在 DbContextOptionsBuilder 上调用 UseInMemoryDatabase 方法?
【发布时间】:2018-06-12 03:59:57
【问题描述】:

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

错误 CS1061“DbContextOptionsBuilder”不包含“UseInMemoryDatabase”的定义,并且找不到接受“DbContextOptionsBuilder”类型的第一个参数的扩展方法“UseInMemoryDatabase”(您是否缺少 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>

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

【问题讨论】:

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


    【解决方案1】:

    根据EF Core: Testing with 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
    }
    

    【讨论】:

    • cli 命令是:dotnet add package Microsoft.EntityFrameworkCore.InMemory
    【解决方案2】:

    你需要它来使用 UseInMemoryDatabase

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

    【讨论】:

      【解决方案3】:

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

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

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

      工具(菜单)-> NuGet 包管理器 -> 管理解决方案的 NuGet 包 -> NuGet(打开的选项卡)- > 搜索“inmemory” -> 选择 Microsoft.EntityFrameworkCore.InMemory -> 勾选 Project -> Install(按钮)

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

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

      【讨论】:

        【解决方案4】:

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

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

        dotnet add package Microsoft.EntityFrameworkCore.InMemory
        

        【讨论】:

          【解决方案5】:

          检查您的 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 就足够了。
          猜你喜欢
          • 1970-01-01
          • 2011-12-09
          • 2013-07-09
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-15
          • 1970-01-01
          相关资源
          最近更新 更多