verwendetes Datenbanksystem: SQLite EFCore
Hallo,
Ich versuche gerade für meine Datenbank ein extra Projekt anzulegen.
Dazu wäre ich nach dieser Anleitung vorgegangen
Link
Der Output in der Powershell wäre > Fehlermeldung:
"The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Project 'ThePLCProject.Model.SQLite' is not found."
Ich hab auch noch nicht ganz verstanden was genau passiert mit
"Add-Migration NewMigration -Project ThePLCProject.Model.SQLite"
In OnConfiguring habe die Zeile wie in der Anleitung auch angepasst zu
optionsBuilder.UseSqlite("Data Source=MyDatabase.sqlite", x => x.MigrationsAssembly("ThePLCProject.Model.SQLite"));
Schon mal vielen Dank fürs helfen
Gruß
Hast du in deiner Projektmappe denn ein Projekt, dass ThePLCProject.Model.SQLite heißt?
Das Powershell CmdLet sucht nach dem Projekt, dass du angibst um hier den Datenbank Context erstellen zu lassen.
Ein paar Informationen gibt es dazu in der doku:
https://docs.microsoft.com/de-de/ef/core/managing-schemas/migrations/projects
Also es gibt bei mir
In Model.SQLite befindet sich eben das
optionsBuilder.UseSqlite("Data Source=MyDatabase.sqlite", x => x.MigrationsAssembly("ThePLCProject.Model.SQLite"));
Wobei mir nicht bewusst ist wofür der Lambda Ausdruck benutzt wird.
Ich bin eben nach dem von dir verlinkten Beispiel vorgegangen.
Einzig bei Punkt 2 bin ich mir nicht ganz sicher, ich hab hier einfach einen Verweis von Model.SQLite in Ui.Desktop hinzugefügt. Das war ja so gemeint?
Und ebenso hab ich Punkt 5 nicht gemacht weil ich keine Ringabhängigkeit bisher hab.
Gruß
Interessantes Namespacing. Weit weg von dem, was man in .NET eigentlich empfiehlt 😉
IIRC lenkt MigrationsAssembly auf die Application-Assembly, nicht auf das SQLite.
Also zB
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(options =>
options.UseSqlite("Data Source=MyDatabase.sqlite",
optionsBuilder => optionsBuilder.MigrationsAssembly("MyWebApplication")));
Wobei mir nicht bewusst ist wofür der Lambda Ausdruck benutzt wird. Google-Suche nach optionsBuilder.UseSqlite MigrationsAssembly 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich kenne keine Empfehlung und nach kurzen googlen bin ich auch nicht fündig geworden.Ich hab nur sehr viele Empfehlungen gefunden und nicht die eine.
Ist das denn eigentlich nötig ?
Grüße
Die Empfehlungen für Namespaces sind sehr konkret; es hält sich leider nur wenige dran.
Wenn Du keine findest, dann hast die Doku vermutlich noch nie aufgemacht 😉
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
Namespace Guidelines
Ohne ordentliches Namespacing wird man dauerhaft Probleme bei der Erweiterbarkeit haben.
Microsoft lebt dies bei seinen Namespaces auch aktiv vor.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
okay danke.
Ich erzeuge aktuell die Datenbank via Code
Und bekomme gelegentlich die Exceptions
Fehlermeldung:
System.DllNotFoundException: 'Die DLL "e_sqlite3": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.'
bei Batteries.Init
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
Batteries.Init();
optionsBuilder.UseSqlite("Data Source=MyDatabase.sqlite");
}
}
Gruß