Чому я не можу викликати метод UseInMemoryDatabase на DbContextOptionsBuilder?


86

По-перше, я не можу користуватися SQL Lite. По-друге, код нижче дає мені:

Помилка CS1061 'DbContextOptionsBuilder' не містить визначення для 'UseInMemoryDatabase' і не може бути знайдено жодного методу розширення 'UseInMemoryDatabase', що приймає перший аргумент типу 'DbContextOptionsBuilder' (вам не вистачає директиви використання або посилання на збірку?)

Код:

 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>

Точна проблема полягає в тому, що метод просто недоступний. Здається, я не розумію, чому. Мені потрібна просвіта з цього питання.

Відповіді:


208

Відповідно до 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

6

Це потрібно для використання UseInMemoryDatabase

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

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 (відкрилася вкладка) -> пошук "inmemory" -> Виберіть Microsoft.EntityFrameworkCore.InMemory -> встановіть прапорець Проект -> Встановити ( кнопка) зображення

Visual Studio КОД: Через термінал ...

Унизу екрана виберіть Термінал (вкладка), а потім введітьdotnet add package Microsoft.EntityFrameworkCore.InMemory

зображення


0

У Mac відкрийте термінал у каталозі проекту або у Visual Studio клацніть правою кнопкою миші проект -> Інструменти -> Відкрити в терміналі .

У пакунку встановлення терміналу, виконавши команду->

dotnet add package Microsoft.EntityFrameworkCore.InMemory
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.