Databinding über mehrere Tabellen

23/05/2009 - 18:23 von Matthias | Report spam
Hallöle,

Ich hab in meiner Datenbank 2 Tabellen. Z.B. User- und Adress-Tabelle.
Dabei geh ich mal davon aus, dass ein User eine Adresse haben kann,
aber nicht muss.
Ich hab die Tabelle mit LinqToSql als Objekte in meiner WPF-Anwendung
verfügbar gemacht und die Felder in den Tabellen an Steuerelemente in
einem Formular gebunden. Das User-Objekt hat jetzt als Eigenschaft ein
Adress-Objekt.
Wenn ich jetzt einen User hab, der noch keine Adresse hat, gebe ich im
Formular neue Adressdaten ein, dann rufe ich beim Speichern
DataContext.SubmitChanges() auf. Änderungen am User-Objekt werden
übernommen. Das neue Adress-Objekt wird aber nicht in der Datenbank
gespeichert.
Wenn ich einen neuen User anlege, muss ich zunàchst am User-Objekt
InsertOnSubmit aufrufen, damit das übernommen wird. Ich vermute, dass
muss ich auch beim Adress-Objekt machen.
Muss ich nun in meiner Anwendung immer prüfen, ob der User schon eine
Adresse hatte und gegebenenfalls InsertOnSubmit aufrufen?
Gehts auch einfacher?
 

Lesen sie die antworten

#1 Frank Dzaebel
24/05/2009 - 11:02 | Warnen spam
Hallo Matthias,

Wenn ich einen neuen User anlege, muss ich zunàchst am User-Objekt
InsertOnSubmit aufrufen, damit das übernommen wird. Ich vermute, dass
muss ich auch beim Adress-Objekt machen.
Muss ich nun in meiner Anwendung immer prüfen, ob der User schon eine
Adresse hatte und gegebenenfalls InsertOnSubmit aufrufen?



Also - für InsertsOnSubmit / InsertAllOnSubmit solltest Du
sowieso beachten, dass Spalten, die etwa Nicht-Null Bedingungen
haben, auch korrekt gefüllt sind (wenn dis nicht automatisch passiert).

Wenn Du Instanzen von Detail-Entitàten erzeugst und eine
Referenz auf die Master-Entitàt besitzt, kannst Du einfach die
neuen Detail-Entitàten über die entsprechende
"Eigenschaft der Master-Entitàt" zufügen, wenn denn auch
wirklich eine Beziehung/Association in der Datenbank für diese
beiden Tabellen gespeichert ist.

[Visual C# 2008 Kompendium - Seite 1115]
http://books.google.de/books?id=pyw...;pg=PA1115
(Master dort: ProductCategory, Detail: Product)

Der Datenkontext kümmert sich dann um die korrekte Auflösung
der Beziehungen. Über "dataContext.GetChangeSet().Inserts"
kannst Du übrigens recht schnell die aktuellen
Anfüge-Entitàten des Trackers einsehen.
_________

Eine andere Möglichkeit ist, dass Du:

// gff. vorher Validierung ..
masterbindingSource.EndEdit();
detailBindingSource.EndEdit();

vor dem SubmitChanges() aufrufen solltest,
wenn Dein Problem mehr auf der Bindings-Seite liegt.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen