Подтвердить что ты не робот

Почему я не могу вызвать метод UseInMemoryDatabase для DbContextOptionsBuilder?

Во-первых, я не могу использовать 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>

Точная проблема заключается в том, что метод просто недоступен. Кажется, я понимаю, почему. Я требую просвещения по этому вопросу.

4b9b3361

Ответ 1

Согласно справке 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
}

Ответ 2

Вам нужно это использовать UseInMemoryDatabase

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