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?
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% 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.
Tags und Links entity-framework sqlite asp.net asp.net-core entity-framework-core