Laden...

DataReader Forward Cursor Simulation bei eigenen Entities?

Erstellt von Sera vor 14 Jahren Letzter Beitrag vor 14 Jahren 607 Views
S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 14 Jahren
DataReader Forward Cursor Simulation bei eigenen Entities?

verwendetes Datenbanksystem: <SQL Server 2008>

Der DataReader läuft doch per "Forward Cursor" die Liste durch.
In der while Schleife kann ich bequem auf die Daten des aktuellen Eintrags zugreifen.

Nun habe ich eigene Entities (als Klassen) im DAL, und finde keine Lösung, diese einzeln zu laden, ohne den gesamten Datenbestand (ala DataTable) im Voraus zu speichern.

Der übliche Weg über den DataReader


while(dr.Read())
{
       att1 = dr["Att1"];
       att2 = dr["Att2"];
       att3 = dr["Att2"];
}

Hier das Problem mit dem Entity


while(dr.Read())
{
       Entity.att1 = dr["Att1"];
       Entity.att2 = dr["Att2"];
       Entity.att3 = dr["Att2"];


}

Natürlich wird das Entity mit den Daten initialisiert, aber kann in der Schleife nicht das Entity zurückgeben. Nur um im BLayer damit arbeiten zu können, brauche ich den gesamten Datenbestand (zumindest 1x Zugriff). Wenn ich jedes Entity in eine List adde und diese List zurückgebe, habe ich das gleiche Problem wie mit dem DataTable. Eine Idee war, das initialisierte Entity über einen Eventhandler zurückzugeben. Der BLayer bekommt so die einzelnen Entities ohne grobe Speicherauslastung. Finde das unsauber.

Kennt jemand von euch einen besseren Ansatz? Danke.

I
9 Beiträge seit 2010
vor 14 Jahren

Du könntest einen ORMapper nutzen um die Datenbanktabellen auf Entities zu mappen. Dann würde der Mapper das Initialisieren der Daten für dich übernehmen. Wäre das nichts für dich dann bleibt dir wohl nichts anderes übrig als die Entities einzeln zu initialisieren und in irgendeiner Art und Weise zwischenzuspeichern.

Wenn du ein einzelnes Entity brauchst dann musst du dir entsprechend die Funktion bauen. Ich stelle mit das so vor:


public IEnumerable<BeispielObjekt> GetAllBeispielObjekte()
{
//DataReader usw initialiseren...
while(dr.Read())
{
yield return new BeispielObjekt(dr["Attr1"],dr["Attr2"]);
}
}
//und
public BeispielObjekt GetBeispielObjektById(Guid id)
{
//DataReader usw initialisieren... mit filter auf id...
return new BeispielObjekt(dr["Attr1"],dr["Attr2"]);
}

Hoffe ich konnte dir eine einigermassen gute Idee geben.

Lg

S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 14 Jahren

danke, yield war mir neu