Warum kann ich die UseInMemoryDatabase-Methode in DbContextOptionsBuilder nicht aufrufen?

75

Zunächst einmal kann ich SQL Lite nicht verwenden. Zweitens gibt mir der folgende Code:

Fehler CS1061 'DbContextOptionsBuilder' enthält keine Definition für 'UseInMemoryDatabase' und es konnte keine Erweiterungsmethode 'UseInMemoryDatabase' gefunden werden, die ein erstes Argument vom Typ 'DbContextOptionsBuilder' akzeptiert (fehlt Ihnen eine using-Direktive oder eine Assemblyreferenz?)

Der Code:

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

Kontext

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

Meine Projekt-CSPROJ-Datei

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

Das genaue Problem ist, dass die Methode einfach nicht verfügbar ist. Ich verstehe nicht warum. Ich brauche Aufklärung zu diesem Thema.

Yusuf Cum
quelle

Antworten:

192

Laut EF Core: Testen mit InMemory- Referenz müssen Sie das Microsoft.EntityFrameworkCore.InMemory- Paket hinzufügen, um die UseInMemoryDatabase()Erweiterungsmethode verwenden zu können mit DbContextOptionsBuilder:

Install-Package Microsoft.EntityFrameworkCore.InMemory

Anschließend können Sie dem Beispiel im Abschnitt "Schreibtests" folgendermaßen folgen:

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

using (var context = new ProductContext(options))
{
    // add service here
}
Tetsuya Yamamoto
quelle
6
Cli Befehl ist: dotnet add package Microsoft.EntityFrameworkCore.InMemory
Jose V
5

Sie benötigen es, um UseInMemoryDatabase zu verwenden

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

Überprüfen Sie in Ihrem NuGet Package Manager => Pakete für Lösung verwalten , überprüfen Sie alle diese Pakete, ob sie in Ihrer Lösung installiert wurden oder nicht, wie folgt:

  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

Ich habe die gleichen Probleme gelöst, nachdem überprüft wurde, ob alle oben genannten Pakete installiert wurden.

Wen Qin Yap
quelle
Ich glaube nicht, dass wir all dies für dasselbe Projekt brauchen. Nur Microsoft.EntityFrameworkCore.InMemory ist gut genug.
Soundararajan
0

Visual Studio 2019: Über die Konsole ...

Extras (Menü) -> NuGet Package Manager -> Package Manager - Konsole und geben Siedotnet add package Microsoft.EntityFrameworkCore.InMemory Bild

Oder mit dem Paket-Manager ...

Extras (Menü) -> NuGet Package Manager -> NuGet-Pakete für Lösung verwalten -> NuGet (Registerkarte, die geöffnet wurde) -> Suche nach "Speicher" -> Wählen Sie Microsoft.EntityFrameworkCore.InMemory -> Aktivieren Sie das Kontrollkästchen Projekt -> Installieren ( Taste) Bild

Visual Studio CODE: Über das Terminal ...

Wählen Sie am unteren Bildschirmrand Terminal (Registerkarte) aus und geben Sie eindotnet add package Microsoft.EntityFrameworkCore.InMemory

Bild

Sunsetquest
quelle