web-dev-qa-db-fra.com

Pourquoi ne puis-je pas appeler la méthode UseInMemoryDatabase sur DbContextOptionsBuilder?

Tout d'abord, je ne peux pas utiliser SQL Lite. Deuxièmement, le code ci-dessous me donne:

L'erreur CS1061 'DbContextOptionsBuilder' ne contient pas de définition pour 'UseInMemoryDatabase' et aucune méthode d'extension 'UseInMemoryDatabase' acceptant un premier argument de type 'DbContextOptionsBuilder' a pu être trouvée (vous manque une directive d'utilisation ou une référence d'assembly?)

Le code:

 var options = new DbContextOptionsBuilder<ProductContext>()
                     .UseInMemoryDatabase(Guid.NewGuid().ToString())
                     .Options;
 var context = new ProductContext(options);

Le contexte

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; }
    }
}

Mon fichier CSPROJ de projet

<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>

Le problème exact est que la méthode n'est tout simplement pas disponible. Je ne semble pas comprendre pourquoi. J'ai besoin de Lumières sur cette question.

44
Yusuf Cum

Selon la référence EF Core: Testing with InMemory , vous devez ajouter le package Microsoft.EntityFrameworkCore.InMemory pour utiliser la méthode d'extension UseInMemoryDatabase() avec DbContextOptionsBuilder:

Install-Package Microsoft.EntityFrameworkCore.InMemory

Ensuite, vous pouvez suivre l'exemple donné dans la section "Écriture de tests" comme ceci:

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

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

Vous en avez besoin pour utiliser UseInMemoryDatabase

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

Archivez votre NuGet Package Manager => Gérer les packages pour la solution , vérifiez tous ces packages, qu'ils soient obtenus installés dans votre solution ou non, comme ci-dessous:

  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

J'ai résolu les mêmes problèmes après avoir vérifié que tous les packages ci-dessus ont été installés.

1
Wen Qin Yap