0

Ich möchte EF Code erste Migrationen in Azure-Funktionen Projekt verwenden, die Klassenbibliothek .net 4.6.2 mit EF 6.2.0 ist. Ich habe db context und entities hinzugefügt. Wenn ich versuche, enable-migrations oder add-migration auszuführen, indem ich diese Klassenbibliothek als Standardprojekt einstelle, dann bekomme ich einen Fehler darunter. Ich habe keine Webprojekte in der Lösung.EF Code erste Migrationen in Azure Funktionen Projekt

Ausnahme calling "SetData" mit "2" Argument (e): „Typ 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in der Montage‚Microsoft.VisualStudio.ProjectSystem. VS.Implementation, Version = 15.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ' ist nicht als serialisierbar gekennzeichnet. " Unter C: \ Benutzer \ xxxxx-win.nuget \ packages \ entityframework \ 6.2.0 \ tools \ EntityFramework.psm1: 720 Zeichen: 5 + $ domain.SetData ('Projekt', $ Projekt) + ~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SerializationException

Aber wenn ich das Projekt und führen dann erstellt es automatisch __MigrationHistory Tabelle mit InitialCreate Eintrag. Aber ich kann diese Migrationsdatei nirgendwo in der Lösung sehen.

dbcontext-Datei als Referenz.

public class TestDbContext : DbContext 
    { 
     public TestDbContext(string cs) 
      : base(cs) 
     { 
     } 

     public TestDbContext() : 
      base(ConfigurationManager.ConnectionStrings["sql_connection"].ConnectionString) 
     { 
      Database.SetInitializer(new TestDBInitializer()); 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<TestRaw>().ToTable("TestRaw"); 
      modelBuilder.Entity<TestRequest>().ToTable("TestRequest"); 
     } 

     public virtual DbSet<TestRaw> TestRaw { get; set; } 

     public virtual DbSet<TestRequest> TestRequest { get; set; } 

    } 
    public class TestDBInitializer : CreateDatabaseIfNotExists<TestDbContext> 
    { 
     protected override void Seed(TestDbContext context) 
     { 
      base.Seed(context); 
     } 
    } 

Auch azure Funktionen verwendet nicht app.config. Also nicht sicher wo EF Abhängigkeiten registriert sind? Können wir die ersten Migrationen von EF Code mit Azure-Funktionen verwenden? Wenn ja, wie werden Migrationsordner und relevante Dateien angezeigt? Muss ich bei der Bereitstellung in der FunctionApp etwas mit Migrationen machen?

Antwort

0

Ich werde diese Antwort in zwei Teile teilen.

1) Der Fehler, der beim Aktivieren/Hinzufügen von Migrationen auftritt ("Ausnahme beim Aufruf von SetData" ...), könnte durch eine Abweichung im Zielframework des Projekts verursacht werden, das Ihren Kontext und Entitäten und die Befehle enthält Sie versuchen zu verwenden. Es scheint jedoch, basierend auf Ihrer Beschreibung, dass Sie diese richtig eingestellt haben, was bedeutet: .net 4.6.2 und EF 6.2.0 (also keiner ist .net core).

konnte ich durch die Schaffung einer .NET-Standard 2.0 Klassenbibliothek für meinen Kontext und Entitäten Klassen den gleichen Fehler bekommen, EF 6.2 in der Installation und die alten Befehle wie „enable-Migrationen“ usw.

Here läuft Es gibt einige andere Gründe, denselben Fehler zu erhalten (auch auf Versionskonflikte und das Festlegen des richtigen Projekts in der Paketmanagerkonsole usw.).

Das Erstellen einer .NET Framework 4.6.2-Klassenbibliothek, das Installieren von EF 6.2 und das Verwenden dieser Befehle funktionierte für mich und sollte definitiv auch für Sie funktionieren.

Da Sie sagen, dass das Ausführen der App tatsächlich die Migrationen ausführt (weil Sie den Datenbankinitialisierer festgelegt haben), würde bedeuten, dass Sie einfach die alten Befehle verwenden, wenn Sie eigentlich "dotnet ef ..." möchten.

Sie können einige detailliertere Informationen über die Struktur Ihrer Lösung (welche Projekte für welche Versionen projiziert) geben, um weitere Analysen zu ermöglichen.

Als Nebenbemerkung unterstützen Azure-Funktionen jetzt auch .NET Core. Sie sollten also .NET Core auf alle Fälle ausprobieren (dh, die Funktionen Projekt, Klassenbibliothek und EF richten sich alle an Core).

2) Azure-Funktionen und EF-Unterstützung: Sie können EF nicht in Azure-Funktionen verwenden. Ich habe gerade Funktionen mit EF Code First-Migrationen (EF 6.2) und Datenbankinitialisierer erstellt, um die Datenbank zur Laufzeit auf die neueste Version zu migrieren.

Ich habe die Funktionen in einem Projekt und den Datenbankkontext und die Entitäten in einem anderen Klassenbibliotheksprojekt, das auch eine app.config-Datei enthält (wird nur zum Erstellen von Migrationen oder zum manuellen Aktualisieren der Datenbank usw. benötigt). Dann kommt es darauf an, dieses Projekt im Funktionsprojekt zu referenzieren, um den Code dort verwenden zu können.

Innerhalb der Funktion erstellen Sie einfach eine neue Instanz Ihrer Kontextklasse. Sie können die Datenbankverbindungszeichenfolge mit dem Basiscode ConfigurationManager.ConnectionStrings["foobarConnString"].ConnectionString (oder dem entsprechenden .NET Core-Code, wenn Sie auf Core zugreifen) abrufen.

Natürlich bedeutet dies, dass Sie EF-Bibliotheken in den Funktionen Projekt und Modellprojekt referenzieren müssen.

Verwandte Themen