Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Ruben
Thema: Dynamische LinQ to SQL Abfragen - dynamische Tabellen
Am im Forum: Datentechnologien

Hallo D-eath,

ich arbeite regelmäßig mit LinQToSQL, aber leider habe ich nur halbwegs dynamische Lösungen gefunden.
Ich kann dir aber vielleicht ein paar gute Tipps geben, da mir einiges aufgefallen ist.

Zum Beispiel die Klasse, die als Entität verwendet wird.
Ich habe ein Beispiel erstellt, wie man es in der Regel bei LinQToSQL löst:


    [System.Data.Linq.Mapping.Table(Name = "tblPersonen")]
    public class Person
    {
        private int _ID;
        private string _vorname;
        private string _nachname;

        [System.Data.Linq.Mapping.Column(Name = "personID", Storage = "_ID", CanBeNull = false, IsPrimaryKey = true)]
        public int ID
        {
            get { return this._ID; }
        }

        [Column(Name = "vorname", Storage = "_vorname", CanBeNull = true)]
        public string Vorname
        {
            get { return this._vorname; }
            set { this._vorname = value; }
        }

        [Column(Name = "nachname", Storage = "_nachname", CanBeNull = true)]
        public string Nachname
        {
            get { return this._nachname; }
            set { this._nachname = value; }
        } 
    }

Wichtig sind die Attribute, da die GetTable<TEntity>()-Methode und die GetTable(System.Type entityType)-Methode nach genau diesen Attributen suchen und daraus sowohl die Abfrage für die Datenbank erstellen als auch die Werte auf die Felder (die privaten) über die Reflection zugreifen und die Werte zuweisen.

Wenn diese Attribute nicht gesetzt sind, dann weiß die Methode nicht wo sie diese zuordnen soll. Das ColumnAttribute benötigt i.d.R. nur den Storage-Wert, da es darüber via Reflection auf das "private" Feld zugreift und den Wert festlegt. Die anderen Werte sind optional.
Z.B. stellt der Wert "Name" den Namen der Spalte in der DatenbankTabelle dar. Ist dieser Name nicht angegeben, wird stattdessen der Name der Eigenschaft als Spaltenname genutzt.

Ich hoffe das kann dir oder jemand anders vorerst weiterhelfen.