Es sind keine Datenbankanbieter EF7 konfiguriert

asp.net-core asp.net-core-mvc c# entity-framework entity-framework-core

Frage

Ich scheine diese Fehlermeldung zu erhalten, wenn ich Entity Framework 7 und MVC6 benutze

System.InvalidOperationException Es sind keine Datenbankanbieter konfiguriert. Konfigurieren Sie einen Datenbankanbieter durch Überschreiben von OnConfiguring in Ihrer DbContext-Klasse oder in der AddDbContext-Methode beim Einrichten von Diensten.

Ich glaube, ich habe alles getan, was ich tun soll, vielleicht ist es ein Fehler. Ich verwende Version 7.0.0-beta7 von Entity Framework.

Ich habe meinen DbContext eingerichtet, eine Schnittstelle, so dass ich DbContext vortäuschen kann (wurde in EntityFramework 6 für Komponententests benötigt). Meine Dienste nehmen die Schnittstelle als Konstruktor und ich habe DI in MVC 6 eingerichtet.

In meiner Startup.cs-Datei habe ich Folgendes

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

Ich habe meine connectionString überprüft und eine gültige Verbindung zurückgegeben. Ich habe auch in meinem Service überprüft, dass das Objekt injiziert wird, und es ist nicht null, also sollte das alles funktionieren.

Meine config.json Datei sieht so aus

{
    "Data": {
        "MyConnection": {
            "ConnectionString": "Server=(local);Database=XXXX;Trusted_Connection=True;"
        }
    }
}

Mein DbContext überschreibt nicht die OnConfiguring-Methode, weil ich glaube, dass es nicht benötigt wird, da ich alles wie oben mache? Habe ich recht? Was vermisse ich? Ich habe mir viele verschiedene Websites angeschaut, ich denke, einige verwenden alten Code, weil einige Methoden nicht existieren und andere Websites die gleichen wie das, was ich habe.

Akzeptierte Antwort

Richten Sie Ihren MyDbContext ein, der unten gezeigt wird, um den Optionen-Parameter zu injizieren, der in Startup.cs AddDbContext () - Aufruf definiert wird.

public MyDbContext(DbContextOptions options)
: base(options)
{ }

Dadurch können Sie Ihre Verbindungszeichenfolge von der Konfiguration (config.json) in den Methodenaufruf options.UseSqlServer () übergeben.

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"]));

Ich stieß auf das gleiche Problem, als ich meine Lösung in die getrennten Projekte Web, BL und DAL aufteilen musste.


Beliebte Antwort

Ich glaube, dass Sie diesen Fehler in der Zeile getroffen haben, in der Sie versuchen, auf einige Daten aus der Datenbank zuzugreifen. Sie können dieses Problem lösen, indem Sie Ihren Kontext konfigu- rieren. Überschreibe einfach die OnConfiguring-Methode.

public class MyDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("<your connection string>");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
}


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum