13

Ich scheine diese Fehlermeldung zu bekommen, wenn Entity Framework 7 und MVC6 mitKeine Datenbank-Anbieter konfiguriert EF7

System.InvalidOperationException Keine Datenbankanbieter konfiguriert sind. Konfigurieren ein Datenbankanbieter durch zwingenden OnConfiguring in Ihrer DbContext Klasse oder in der AddDbContext Methode, wenn Dienste.

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

Ich habe mein Setup DbContext, eine Schnittstelle, so kann ich DbContext verspotten (wurde in EntityFramework 6 für Unit-Tests erforderlich). Meine Leistungen nehmen Sie die Schnittstelle als Konstrukteur und ich habe DI-Setup in MVC 6.

In meiner Startup.cs Datei, die ich die

folgende haben
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 Connection geprüft, und das ist eine gültige Verbindung Rückkehr . 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 wie folgt aus

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

Mein DbContext die OnConfiguring Methode nicht außer Kraft setzen, weil ich, wie ich es bin glaube, ist es nicht erforderlich, alle wie oben tun? 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.

+0

Wie Sie Ihre 'MyDbContext' in Code erstellen? – DavidG

Antwort

26

Richten Sie Ihre MyDbContext unten die Optionen Parameter in Startup.cs AddDbContext() Aufruf definiert injizieren.

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

Dies ermöglicht Ihnen, Ihre Verbindungszeichenfolge aus der Konfiguration (config.json) in den Methodenaufruf options.UseSqlServer()

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

ich das gleiche Problem gestoßen passieren, wenn ich aufgespalten musste Meine Lösung in separate Projekte Web, BL und DAL.

+0

Perfekt! Danke – Gillardo

+0

Wenn Sie den DbContext verspotten möchten, brauchen Sie keine Schnittstelle.Machen Sie das DbSet virtuell, damit Sie sich darüber lustig machen können. Ich nehme an, Sie wollen nicht Kontext Kontext.Datenbank oder Kontext.Konfigurieren und testen Sie die Entität Framework ;-) – Pascal

+0

Wie würden Sie MyDbContext im Controller instanziieren oder wo immer Sie es brauchen? –

4

Ich glaube, dass dieser Fehler auf der Linie treffen, wo Sie einige Daten aus der Datenbank zuzugreifen versuchen, zu. 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) 
    { 
     ... 
    } 
} 
1

Versuchen Sie Folgendes:

public class DataContext<TEntity> : DbContext where TEntity : class 
{ 

    private TEntity _entity = null; 
    public DataContext() 
     : base() 
    { 

    } 
    public DataContext(TEntity entity) 
    { 
     this._entity = entity; 
    } 
    public DbSet<TEntity> Entity { get; set; } 


    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.HasDefaultSchema("dbo"); 

    } 

    public IConfigurationRoot Configuration { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var configuration = new ConfigurationBuilder() 
       .AddJsonFile("appsettings.json"); 
     Configuration = configuration.Build(); 
     optionsBuilder.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); 
    } 
} 
Verwandte Themen