Herausfinden ob meine Eigenschaft mit [Column] an einer Datenbank-Tabellenspalte gemappt wurde

11/11/2008 - 11:26 von Mike Woiwod | Report spam
Guten Tag,

ich benutze LINQToSQL und mochte per Reflections oder Ahnlichem herausfinden, welche Eigenschaften meiner Klasse mit [Column] einer Datenbank-Tabellenspalte zugeweisen wurden.
Also gibts ne Moglichkeit zu erfahren ob vor meiner Eigenschaften (PropertyInfo) ein [Column] steht ?

Ich mochte ein Datenbank-Objekt mit einem Objekt aus einer Liste im vergleichen (beide haben gleichen Primarschlussel). doch es gibt Spalten bzw. Eigenschaften, die ich nicht in der Datenbank habe, und wenn ich mit Reflections
die Eigenschaftswerte vergleichen mochten gibt es automatisch immer Abweichungen, weil in dem Listen-Objekt mehr Daten angegeben sind (Eigenschaften sind mit mehr Werten ausgestattet) als in dem Datenbank-Objekt (beides aber die gleiche Klasse)

Ausser mit uber [Column] wusste ich nicht wie ich herausfinden kann, welche Eigenschaften NICHT mit in der Datenbanktabelle gemappt wurden...
 

Lesen sie die antworten

#1 Frank Dzaebel
11/11/2008 - 20:43 | Warnen spam
Hallo Mike,

ich benutze LINQToSQL und mochte per Reflections oder Ahnlichem
herausfinden, welche Eigenschaften meiner Klasse mit [Column] einer
Datenbank-Tabellenspalte zugeweisen wurden.



zum Beispiel:

private void Form1_Load(object sender, EventArgs e)
{
var props = // -> [Table(Name="dbo.Customers")]
from p in typeof(Customers).GetProperties()
let atts = p.GetCustomAttributes(typeof(ColumnAttribute), true)
where atts.Count() > 0
select new { Attribut = (ColumnAttribute)atts[0],
Eigenschaft = p.Name };
foreach (var p in props)
MessageBox.Show(p.Eigenschaft + ":" +
PropStrings(p.Attribut));
}

string PropStrings(object o)
{
StringBuilder sb = new StringBuilder();
foreach (PropertyInfo p in o.GetType().GetProperties())
sb.AppendFormat(" {0} = {1}", p.Name,
p.GetValue(o, null));
return sb.ToString();
}




Ausser mit uber [Column] wusste ich nicht wie ich herausfinden kann,
welche Eigenschaften NICHT mit in der Datenbanktabelle gemappt
wurden...



Doch, es gibt auch den MappingSource des DataContext's.
Zum Beispiel:

var north = new NorthDataContext();
var firstDataMember = north.Mapping.MappingSource.
GetModel(typeof(NorthDataContext)).
GetMetaType(typeof(Customers)).DataMembers[0];


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

Ähnliche fragen