verwendetes Datenbanksystem: <SQL-Server 2000-2008 (Standard/Express)>
Hallo,
ich habe eine wirklich dumme Anfängerfrage X( - Bitte nicht schlagen!:
In mehreren unabhängigen Methoden möchte ich jeweils ein EntityObject als Parameter übergeben.
In den Methoden möchte ich die EntityObjects ändern und speichern.
Nur in der Methode kann ich nicht auf bestimmte Felder zugreifen. Wie kann ich .NET begreiflich machen, dass es diese Felder auch tatsächlich gibt? (Ich übergebe immer Entitäten, wobei diese Felder bei vielen, aber nicht allen Entitäten existieren können):
Bsp.:
Es existiert ein EntityObject "Kunde" mit einem Feld "Feld1" und weitere EntityObjecte (z.B. "Artikel", "Lieferanten" etc.) mit dem gleichen Feld "Feld1".
In der Methode soll immer "Feld1" geändert werden.
public static void AendereFeld(EntityObject o)
{
o.Feld1 = "Test"; // Soll z. B. Kunde.Feld1 ändern
}
Leider kommt eine Fehlermeldung: EntityObject enthält keine Definition für "Feld1" und es konnte keine Erweiterungsmethode gefunden werden.
Wie umgeht man das?
Danke
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Das wirst Du nur mit Reflection lösen können. Schau Dir mal die klasse PropertyInfo oder das schlüsselwort dynamic (neu in .Net4 & VS2010) an.
Reflection hat natürlich Performance technische nachteile. Das wirst du nicht bei 10 Aufrufen merken, aber bei 100000.
@m.grauber:
Wenn Du doch weist das es eine "Kunde" ist, warum übergibst du dann EntityObject?
Hallo FZelle,
weil ich das gleiche Feld auch in vielen anderen "Tabellen" (Entitäten) habe.
Z. B. Könnte es ein "CreationDate" sein.
Wie kann ich dann ein Kundenobjekt, Artikelobjekt, etc. übergeben und das gleichnamige Feld (z. B. CreationDate) kann in allen Objekten geändert werden. Über die als Parameter übergebene Entität kann ich ja direkt darauf zugreifen.
Ich übergebe ja auch nur Objekte, die dieses Feld besitzen - nur .NET traut mir leider so viel Intelligenz nicht zu. 🙁
Gruß
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Na dann definiere doch ein Interface und lass es den bestimmten Entitaeten implementieren.
Hallo unconnected,
danke für den Tipp! Das klappt tatsächlich! 👍
Ich hatte gedacht, dass es einen leichteren Weg dafür gibt, aber die Laufzeit ist mir für 1 Änderung nicht so wichtig.
Grüße!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Hallo witte,
stimmt! 👍 Das ist auch noch ein Weg (den vielleicht auch Microsoft so denken würde) Dann wäre die Methode am jeweiligen Objekt dran.
Vielen Dank für Eure hilfreiche Tipps!
Grüße
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Ich übergebe ja auch nur Objekte, die dieses Feld besitzen - nur .NET traut mir leider so viel Intelligenz nicht zu. 😦Gruß
Dafür gibt es z.b. Interfaces.
mit freundlichen Grüßen,
Tomot
Projekte: www.gesellschaftsspieler-gesucht.de