LinqToSql tabellenname ändern

17/12/2008 - 11:00 von Patrick Denke | Report spam
Ich nutze LinqToSql mit externen Mapping.
Mit SQLMetal habe ich mir dazu eine xml-Datei und eine Klassendatei
erstellen lassen.
Làuft soweit ganz gut. Nur was ist, wenn der Kunde den Namen der Tabelle im
SQL-Server àndert? Ich suche eine Möglichkeit, den Tabellennamen
einstellbar zu machen, ohne die Anwendung neu kompilieren zu müssen.
Beim Datenbanknamen funktioniert dies, da der im ConnectionString mit
angegeben wird.
Ich nutze folgenden Code:

Dim connection_string As String, messvorgang As New Franklin_Messvorgaenge

With _optionen.SQL
connection_string = "Data Source=" + .Server + ";Initial Catalog=" +
.Datenbank + ";User ID=" + .Benutzer + ";Password=" + .Passwort
End With

' XML-Datei auslesen und als external mapping an DataContext übergeben
' XML-Datei enthàlt die Tabellenbeschreibungen, generiert durch
SQLMetal.exe
Dim reader As New
IO.StreamReader(My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData
+ "\db.xml")
Dim _inhalt As String = reader.ReadToEnd
reader.Close()

Dim verbindung As New DataContext(connection_string,
XmlMappingSource.FromXml(_inhalt))

Dim messvorgaenge As Table(Of Franklin_Messvorgaenge) verbindung.GetTable(Of Franklin_Messvorgaenge)()
With messvorgang
.Messung = System.Guid.NewGuid
.Lfd_Nummer_Messung = ergebnisse.LaufendeNummer
... usw.
End With
messvorgaenge.InsertOnSubmit(messvorgang)
verbindung.SubmitChanges()

Der Tabellenname ist in diesem Fall Franklin_Messvorgaenge. Der von
SQLMetal erstellte Code enthàlt ebenfalls eine Klasse gleichen Namens, in
der xml-Datei steht ebenfalls dieser Name.
Wenn ich den Tabellenname sowohl in der Datenbank als auch in der xml-Datei
àndere, wird bereits in der Zeile 'Dim verbindung as new DataContext... '
eine Ausnahme erzeugt. Ich muß erst den Namen der Klasse
Franklin_Messvorgaenge im Code àndern, damit wieder alles funktioniert.
Ich möchte aber so flexibel sein, den Tabellennamen parametrierbar zu
halten ohne den Quellcode zu àndern.
Wie kann ich das realisieren?

Gruß Patrick
 

Lesen sie die antworten

#1 Patrick Denke
18/12/2008 - 10:16 | Warnen spam
Am Wed, 17 Dec 2008 11:00:49 +0100 schrieb Patrick Denke:

Ich nutze LinqToSql mit externen Mapping.
Mit SQLMetal habe ich mir dazu eine xml-Datei und eine Klassendatei
erstellen lassen.
Làuft soweit ganz gut. Nur was ist, wenn der Kunde den Namen der Tabelle im
SQL-Server àndert? Ich suche eine Möglichkeit, den Tabellennamen
einstellbar zu machen, ohne die Anwendung neu kompilieren zu müssen.
Beim Datenbanknamen funktioniert dies, da der im ConnectionString mit
angegeben wird.



Ich hab's heraus gefunden. Man muß in der xml-Datei den Parameter "table
name" und "member" anpassen und zusàtzlich im Code bei der mit SQLMetal
erstellten Klassendatei, welche die Tabellenbeschreibung enthàlt, das Table
Attribut voranstellen, das "Name" verbindet die Tabelle
Franklin_Messvorgaenge1 mit der Klasse:
<Table(Name:="Franklin_Messvorgaenge1")> _
Partial Public Class Franklin_Messvorgaenge

Jetzt werde ich die xml-Datei noch automatisch anpassen und schon kann der
User durch simples Eintragen eines neuen Tabellennamens in den
Programmeinstellungen den Tabellennamen àndern.

Gruß Patrick

Ähnliche fragen