2016-03-18 9 views
0

Ich habe eine. NET-DLL, die Geschäftslogik enthält, die ich in einem SSIS-Paket wiederverwenden möchte. Die DLL verwendet Entity Framework für ihre Datenzugriffsebene. Ich habe einen Weg gefunden, die DLLs zur Laufzeit zu laden (How to load an Assembly...), aber ich bekomme immer Fehler, die dazu führen, dass ich keine gültige Verbindungszeichenfolge habe. Normalerweise befindet sich die Verbindungszeichenfolge in unseren EF-Anwendungen in der Datei app.config, und EF lädt sie automatisch. Ich kann jedoch keine Möglichkeit finden, eine Konfigurationsdatei zu einem SSIS-Paket hinzuzufügen. Hat jemand eine Idee, wie ich eine Konfigurationsdatei hinzufügen oder eine Verbindungszeichenfolge festlegen kann, damit eine EF-basierte DLL es verwenden kann?SSIS und dll mit Entity Framework

Ich bin mit VS 2012 und SQL Server 2012, EF 6.0 und .Net Framework 4.52

+1

Haben Sie http://www.sqlis.com/post/Where-is-my-appconfig-for-SSIS.aspx überprüft? – Ako

+0

Danke - das hat funktioniert. Es scheint etwas bizarr, dass ich alle meine paketspezifischen Einstellungen in eine allgemeine dtshost.exe.config-Datei schreiben müsste - aber es funktioniert, wenn ich meine Entity Framework-Verbindungszeichenfolge darin stecke. – Clinemi

Antwort

0

Es scheint, gibt es zwei Möglichkeiten, um eine Verbindungszeichenfolge in eine DLL zu laden, die von einem SSIS-Paket aufgerufen wird:

  1. die Informationen in Ako den Link verwenden, die im Grunde sagt die Verbindungszeichenfolge der Konfigurationsdatei des Programms hinzuzufügen, die das SSIS-Paket (zB DTExec.exe.config, DtsDebugHost.exe.config oder dtshost läuft. exe.config). Das ist ein wenig gruselig, aber es funktioniert.

  2. Wie hier Entity Framework, dll, excel geschrieben, Ihre EF Kontextklasse in Ihrer DLL ändern, in die Verbindungszeichenfolge zu übergeben - als Teil des Konstrukteurs:

    public mycontext (string dbNameOrConnectionString): base (dbNameOrConnectionString) {}

..then Pass in der Zeichenfolge, wenn Sie den Objektkontext zu schaffen

string connectionString = GetConnectionStringFromExternalSource(); 
MyContext myDb = new MyContext(connectionString); 

natürlich - zu Dazu müssen Sie in der Lage sein, die Datenschicht der DLL so zu ändern, dass sie sowohl mit einer normalen .NET-Anwendung als auch mit einer extern bereitgestellten Verbindungszeichenfolge für ein SSIS-Paket funktioniert.