| 

.NET C# Java Javascript Exception

2
Hallo,

da die Datenbank fest vorgegeben ist, habe ich das Datenbankmodell über das EF eingelesen. Dabei wird natürlich auch eine DB-Verbindung in der App.config hinterlegt. Da diese Datenbankverbindung aber dynamisch sein soll muss ich diese zur Laufzeit ändern.
Da Verbindung und Modell aber automatisch erzeugt wurden gestaltet sich das derzeit (für mich) alles andere als einfach.

Über die dataContext kann ich ja auf 7 new Konstruktoren zurückgreifen, einer davon übernimmt Connectionstrings. Also habe ich in meinem automatisch generiertierten Modell(Klasse) einen weiteren New Konstruktor erzeugt:

Partial Public Class DemoEntities Inherits DbContext
/ vorgeneriert
Public Sub New()
MyBase.New()
End Sub
/ selbst gebastelt
Public Sub New(con As String)
MyBase.New(con)
End Sub


Doch wenn ich im Projekt (soll mal eine DLL werden die alle Funktionen des Programms intus hat die für die DB-Modifikation wichtig sind - somit leicht austauschbar) eine neue entität erzeuge, so ist die neue Connection nicht wirklich da...

Public function DoSomething(bla as bla, constring as string) /constring soll mal der übergebene db-string werden
dim db = new DemoEntities(constring)
db.Database.connection.Open()
...


Herumgewurstelt habe ich beim Connectionstring mittlerweile in alle Richtungen... über SQLstringbuilder und EntityBuilder... irgendwie funktioniert nichts davon.

Aktuell sieht mein string so aus:

Public Function enititysubcreate()
Dim EntityBuilder As New EntityConnectionStringBuilder
Dim sqlbuilder As New SqlConnectionStringBuilder

sqlbuilder.DataSource = "somePC"
sqlbuilder.InitialCatalog = "DemoDb"
sqlbuilder.UserID = "someUser"
sqlbuilder.Password = "somePW"

EntityBuilder.Provider = "System.Data.SqlClient"
EntityBuilder.ProviderConnectionString = sqlbuilder.ToString
EntityBuilder.Metadata = "res://*/DemoEntityModel.csdl|" & _
"res://*/DemoEntityModel.ssdl|" & _
"res://*/DemoEntityModel.msl"
Return EntityBuilder.ConnectionString.ToString
End Function


Über die app.config liesse sich zwar recht einfach zwischen mehreren Connectionstrings wechseln, aber wie bereits beschrieben ist dies keine Option.

Ideal wäre eine Lösung in vb.net... zur Not bekomme ich aus C# auch noch eine gebastelt...

Vielen Dank für die Mühe :)
News:
27.11.2012
trialanderror 3 1 2
2 Antworten
1
Versuche mal:
string connectionString = "data source=DeinHost;initial catalog=DeineDatenbank;user id=DeinUser;password=vergessen;multipleactiveresultsets=True;App=EntityFramework";

using (var myContext = new MyEntities())
{
myContect.Database.Connection.ConnectionString = connectionString;
}

Acho so, vb.net wahrscheinlich:
Dim connectionString As String = "data source=DeinHost;initial catalog=DeineDatenbank;user id=DeinUser;password=vergessen;multipleactiveresultsets=True;App=EntityFramework"
Using myContext = New MyEntities()
myContect.Database.Connection.ConnectionString = connectionString
End Using
27.11.2012
JEwen 2,7k 5
0
Danke erstmal, ich weiss zwar nicht wieso es jetzt funktioniert und vorhin nicht ( ich meine ich hatte den String selbst auch schon mal so... ) aber egal.

Fehler habe ich trotzdem noch:

Code, der mit den T4-Vorlagen für die Database First- und Model 
First-Entwicklunggeneriert wurde, funktioniert im Code First-Modus
möglicherweise nicht ordnungsgemäß. Wenn Sie weiterhin 'Database First'
bzw. 'Model First' verwenden möchten, stellen Sie sicher, dass die Entity
Framework-Verbindungszeichenfolge in der .config-Datei der ausführenden
Anwendung angegeben ist. Um die mit 'Database First' oder 'Model First'
generierten Klassen im Code First-Modus zu verwenden, fügen Sie eine ggf.
erforderliche Zusatzkonfiguration mithilfe von Attributen oder der
DbModelBuilder-API hinzu, und entfernen Sie dann den Code, der diese
Ausnahme auslöst.


Den habe ich den halben Tag versucht wegzubekommen, aber irgendwas das ich noch nicht verstehe ist wohl das problem dabei.

Edit:
Zu früh gefreut...
Die DB Connection funktioniert so zwar, aber in Verbindung mit dem EF Modell wird keine Connection aufgebaut. grmpf
27.11.2012
trialanderror 3 1 2
Das hört sich nach einem Fehler im Code-Generator an.
Hast du eine zweite Code-Datei erstellt und die EntityContext-Klasse dort mit dem Modifer "partial" eingefügt?

An den automatisch generierten Klassen würde ich nichts ändern. Nur über eine separate Code-Datei mit partial-Modifer sollten Anpassungen bzw. Erweiterungen erfolgen.
Marcus.D 28.01.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH