Laden...

SQLite.CodeFirst Migrations - Provider kann nicht geladen werden

Erstellt von GeneVorph vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.483 Views
G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 6 Jahren
SQLite.CodeFirst Migrations - Provider kann nicht geladen werden

verwendetes Datenbanksystem: <SQLite3>

Hallo,

beim Versuch eine Datenbank mit SQLite in Verbindung mit dem Entity Framework zu erstellen, bekomme ich folgende Fehlermeldung auf der Paket-Manager-Konsole beim Versuch eine Migration zu erstellen:
Meine Eingabe: enable-migrations

Die Fehlermeldung:> Fehlermeldung:

The Entity Framework provider type 'System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SQLite.EF6' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See
>
for more information.

Ich verstehe zwar den sinngemäßen Inhalt der Fehlermeldung, weiß aber nicht, wie ich den Fehler genau beheben soll (btw: der microsoft-Link ist tot...).

Beim Einrichten des Projekts habe ich mich auf diese Anleitung von github bezogen:
https://github.com/msallin/SQLiteCodeFirst

Schritt 1 war die Installation per Nu-Get-Paketmanager-Console:
install-package sqlite.codefirst

Im Testprojekt habe ich folgende DbContext:

public class SurveyDbContext : DbContext
    {
        public SurveyDbContext()
            : base("SurveyDbContext")
        { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<SurveyDbContext>(modelBuilder);
            Database.SetInitializer(sqliteConnectionInitializer);
        }

        public DbSet<Student> Students { get; set; }

Meine App.conig schaut so aus:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite"/>
    </providers>
  </entityFramework>
  
  <connectionStrings>
    <add name="SurveyDbContext" connectionString=" data source = .\SQLite; initial catalog=TimerDB; integrated security = SSPI" providerName="System.Data.SqlClient" />
  </connectionStrings>
  
</configuration>

Ich verstehe nicht, was mit "Make sure that the assembly-qualified name is used" gemeint sein könnte - der Install per PMK hat reibungslos funktioniert, alle Verweise wurden hinzugefügt. Oder genügt das nicht, habe ich etwas vergessen?

Vielen Dank für eure Hilfe,
Gruß
Vorph

G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 6 Jahren
[leider] noch keine Lösung...

So, ich habe mich die letzten Tage noch einmal instensiv mit der Fehlermeldung auseinandergesetzt: mehr als rumraten, was das Problem sein könnte, war leider nicht 😦

Nach Installation des Nu-Get-Packages sqlite.codefirst wird in meinem Projekt der Ordner 'packages' mit den Unterordnern SQLite.CodeFirst.1.3.2.19 und EntityFramework.6.1.0 erstellt. In diesen befindet sich jeweils ein Ordner 'lib' mit den .dll-Dateien für das .net40 bzw. 45 Framework.

a) Ich habe die .45-dlls jeweils per 'Verweis hinzufügen...' "händisch" dem Projekt hinzugefügt - die Fehlermeldung bleibt.

b) Ich habe überprüft, ob die dlls irgendwie schreibgeschützt sind oder sonst irgendwie Probleme beim Zugriff machen - ohne Erfolg, es liegt kein Schreibschutz vor.

Tja - und damit bin ich mit meinem Latein wieder mal am Ende!

Die Aufforderung '...make sure that the assembly-qualified name is used': wie kann ich die überprüfen? Was genau ist damit gemeint?

bzw.: '...and that the assembly is available to the running application' --> auch hier: wie stelle ich das fest? Ich kann nur sagen, dass die dlls unter "Verweise" auftauchen, weshalb ich mal davon ausgehe, dass sie der 'running application' durchaus 'available' sind. Fehlannahme?

Könnte mein ConnectionString falsch sein? Vielleicht die relative Pfadangabe?
Der Providername (providerName="System.Data.SqlClient)??
Komplett ratlos...

Gruß
Vorph

16.806 Beiträge seit 2008
vor 6 Jahren

Wenn das ein neues Projekt ist und Du nicht auf EF angewiesen bist, dann empfehle ich Dir Dapper als MicroORM und FluentMigrator für die Migrations.

Ich kenne kein Projekt, bei dem langfristig das EF mit den Migrations keine Probleme verursacht hat.
Konkret kann ich Dir aber nicht helfen; ich weigere mich (erfolgreich) seit Jahren diesen Mechanismus in meinen Projekten zu verwenden.

F
10.010 Beiträge seit 2004
vor 6 Jahren

Ganz abgesehen davon das ich hier Abt mal ausnahmsweise recht geben muss ( besser für kleine Projekte wäre eher SQLite-NET ), lies mal was du schreibst.

Könnte mein ConnectionString falsch sein? Vielleicht die relative Pfadangabe?
Der Providername (providerName="System.Data.SqlClient)??
Komplett ratlos...

Du meinst also System.Data.SqlClient wäre das richtige?