Laden...

Migration: DbContext befindet sich in einem anderen Projekt, das Projekt wird nicht gefunden.

Erstellt von jok3r89 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.813 Views
J
jok3r89 Themenstarter:in
70 Beiträge seit 2017
vor 5 Jahren
Migration: DbContext befindet sich in einem anderen Projekt, das Projekt wird nicht gefunden.

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ß

P
441 Beiträge seit 2014
vor 5 Jahren

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

J
jok3r89 Themenstarter:in
70 Beiträge seit 2017
vor 5 Jahren

Also es gibt bei mir

  • eine Solution
    -ThePLCProject
  • mit mehren Projekten
    -Ui.Desktop ( Start Projekt )
    -Ui.Region
    -Logic.Ui
    -Logic.PLCService
    -Model.SQLite ( Darin befindet sich DbContext)

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ß

16.834 Beiträge seit 2008
vor 5 Jahren

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 😉

J
jok3r89 Themenstarter:in
70 Beiträge seit 2017
vor 5 Jahren

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

16.834 Beiträge seit 2008
vor 5 Jahren

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.

J
jok3r89 Themenstarter:in
70 Beiträge seit 2017
vor 5 Jahren

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ß