ASP.NET 5, EF 7 und SQLite - SQLite Fehler 1: 'keine solche Tabelle: Blog'

9

Ich habe den Leitfaden Erste Schritte zu ASP.NET 5 über Entity Framework 7 gelesen und ich habe MicrosoftSqlServer durch Sqlite ersetzt, der einzige Unterschied im Code ist in Startup.cs:

%Vor%

Wenn ich die Website starte und zu / Blogs navigiere, erhalte ich einen Fehler:

  

Microsoft.Data.Sqlite.SqliteException wurde vom Benutzercode
nicht behandelt   ErrorCode = -2147467259 HResult = -2147467259 Nachricht = SQLite Fehler 1:   'keine solche Tabelle: Blog' Quelle = Microsoft.Data.Sqlite
  SqliteErrorCode = 1 StackTrace:          bei Microsoft.Data.Sqlite.Interop.MarshalEx.ThrowExceptionForRC (Int32 rc,   Sqlite3Handle db)          bei Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader (CommandBehavior   Verhalten)          bei Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader (CommandBehavior   Verhalten)          bei System.Data.Common.DbCommand.ExecuteReader ()          bei Microsoft.Data.Entity.Query.Internal.QueryEnumerable.Enumerator.MoveNext ()          bei System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext ()          bei System.Linq.Enumerable.d__1'2.MoveNext ()          bei System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext ()          bei Microsoft.Data.Entity.Query.LinqOperatorProvider.ExceptionInterceptor'1.EnumeratorExceptionInterceptor.MoveNext ()          bei System.Collections.Generic.List'1..ctor (IEnumerable'1-Auflistung)          bei System.Linq.Enumerable.ToList [TSource] (IEnumerable'1 Quelle)          bei EFGetStarted.AspNet5.Controllers.BlogsController.Index () in d: \ arthur \ documents \ visual studio   2015 \ Projects \ EFGetStarted.AspNet5 \ src \ EFGetStarted.AspNet5 \ Controllers \ BlogsController.cs: regeln   18 InnerException:

Ich verstehe das so, als ob es keine Tabelle namens "Blog" gäbe, aber wenn ich die DB-Datei im DB Browser für SQLite öffne, gibt es tatsächlich eine Tabelle namens "Blog":

Erfordert SQLite weitere Änderungen im Code oder ist dies ein Fehler im SQLite-Connector für Entity Framework?

    
Arthur Rump 31.10.2015, 18:22
quelle

3 Antworten

3

Es ist sehr wahrscheinlich, dass die Datenbank, die von EF geöffnet wird, nicht die Datei ist, die Sie in DB Browser öffnen. SQLite verwendet das aktuelle Arbeitsverzeichnis des Prozesses, das, wenn es in IIS oder anderen Servern gestartet wird, ein anderer Ordner als das Quellcodeverzeichnis sein kann. (Siehe Ausgaben Ссылка und Ссылка ).

Um sicherzustellen, dass Ihre db-Datei an der richtigen Stelle ist, verwenden Sie einen absoluten Pfad. Beispiel:

%Vor%     
natemcmaster 02.11.2015, 17:35
quelle
0

Ich hatte dieses Problem in netcoreapp2.0 . Es gibt ein ähnliches Problem , das möglicherweise einen Fehler verursacht, aber ich wollte es nicht lösen, indem ich zu einer Nacht gehe bauen.

Die Lösung für mich bestand darin, ein SqliteConnection zu erstellen und zu übergeben, anstatt die Builder-Zeichenfolge zu verwenden.

Also für dieses Setup:

%Vor%

Verfassen Sie für die DI wie folgt:

%Vor%

Der Fehler, den ich hatte, benutzte diesen Init-Stil:

%Vor%

Mein Gerüst hat auch einen einmaligen Anruf an:

%Vor%

Bei diesem Ansatz würden alle meine DI-instanziierten Kopien von SomeDbContext alle auf eine gültige SQLite-Datenbank verweisen, und diese Datenbank hätte automatisch ein Schema erstellt, wie es bei meinen Entitäten der Fall ist.

    
user326608 11.12.2017 11:10
quelle
0

Sieht so aus, als hätten sich die Dinge geändert, weil IApplicationEnvironment durch IHostingEnvironment ersetzt wurde.

IApplicationEnvironment \ IRuntimeEnvironment entfernen

%Vor%     
T Brown 21.12.2017 06:37
quelle