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
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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?