Fehler bei der ersten Migration des EF-Codes "Objekt wurde getrennt oder ist auf dem Server nicht vorhanden"

8

Ich benutze Entity Framework 6.1.1 auf SQL Server 2008 und ich habe eine lange laufende Code-Migration (ca. 20 Minuten). Es kommt zu dem Ende und gibt dann den folgenden Fehler.

%Vor%

Der Punkt der Migration besteht darin, ein Feld in der Datenbank zu aktualisieren, in dem der MIME-Typ einiger Binärdaten gespeichert ist. Es durchläuft jede Zeile, liest die Binärdaten, versucht festzustellen, um welche Art von Inhalt es sich handelt, und schreibt dann den entsprechenden MIME-Typ in die entsprechende Zeile.

Das folgende Skript verwendet ADO.NET, um eine Liste der auszuführenden Update-Anweisungen zu generieren. Ich verwende ADO.NET, weil ich die Imaging-Bibliotheken von .NET (System.Drawing.Imaging.ImageFormat) verwenden muss, um den Typ des binären Inhalts in jeder Zeile zu bestimmen (es wird ein JPEG, PNG oder PDF sein).

%Vor%

Ich habe dies gesehen fünf Jahre alte Post und die Artikel, auf die es verlinkt, scheinen nicht mehr zu existieren. Zumindest kann ich sie nicht finden.

Weiß jemand, was hier vor sich geht?

- UPDATE -
Dies scheint etwas damit zu tun zu haben, wie lange die Migration dauert. Ich habe eine Migration erstellt, die absolut nichts anderes tut, als 22 Minuten lang zu schlafen.

%Vor%

und ich habe den gleichen Fehler bekommen. Es scheint also eine Auszeit zu sein. Ich bin nicht 100% welches Objekt auf dem Server, auf das sie sich beziehen, und ich kann nicht viel zu diesem Problem finden, da es sich auf Code-Erstmigrationen bezieht.

Ich habe versucht, die Eigenschaft CommandTimeout in der Datei migrations Configuration.cs auf 5000 zu setzen, aber es hat nicht geholfen. Ich habe auch versucht, die Remove query timeout -Einstellung von SQL Server auf 0 zu setzen, um Timeouts zu verhindern, aber es hat auch nicht geholfen.

    
d512 23.06.2015, 13:32
quelle

2 Antworten

3

Pochiert von [GitHub EntityFramework 6 Ausgabe # 96] [ Ссылка

  

Das Problem ist, dass die Lebensdauer des ToolLogger Lease (Basisklasse   MigrationsLogger ist ein MarshalByRefObject) ist standardmäßig (5   Protokoll). Die ToolingFacade erstellt den Logger, der in der   Hauptprogramm-App-Domain. Die Migrationen werden in einer anderen App ausgeführt   Domain. Wenn eine Migration länger als 5 Minuten dauert, wird versucht, sich anzumelden   Jede weitere Information führt zu diesem Fehler. Eine Lösung wäre es   Erhöhen Sie die Lease-Laufzeit im Hauptprogramm. Also ... Hauptsache   Programm, vor dem Erstellen der ToolingFacade, legen Sie die Lease-Lebensdauer fest   zu einem längeren Zeitraum:

%Vor%     
Roadkillnz 09.11.2017 02:43
quelle
0

Das hat uns Kopfschmerzen bereitet. Das Problem scheint auf dem Entwurf des EF-Migrationsprogramms zurückzuführen zu sein. Das Programm erstellt eine neue Anwendungsdomäne, in der Migrationen ausgeführt werden. Die Protokollierung für die neue Anwendungsdomäne wird in der ursprünglichen Anwendungsdomäne gehandhabt (weshalb Remoting einbezogen wird). Offensichtlich wird der Logger GC'ed, wenn eine einzelne Migration zu viel Zeit in Anspruch nimmt. Ich habe dies verifiziert, indem ich alle Logger-Aufrufe durch Console.WriteLine ersetzt habe - wodurch das Problem beseitigt wird. Es kann einen Fehler geben, indem Sie das migrate.exe-Tool ändern (aber möglicherweise müssen Sie die EntityFramework-Assembly selbst ändern).

    
Walt 05.03.2017 14:57
quelle