2011-01-14 9 views
0

Für mein Projekt verwende ich SqlCE 3.5, Linq2Sql und generieren Entity-Klassen (dbml-Datei) mit SqlMetal.Linq-zu-Sql, Verwendung von Entitätsklassen und Parent/Child-Objekten

Wenn ich Erweiterungen der Entitätsklassen als meine Geschäftsobjektklassen verwende, wie soll ich mit untergeordneten Objekten umgehen?

Kann ich das vorhandene EntitySet (Of ChildClass) verwenden, das sich bereits in der dbml-Datei befindet? Oder sollte ich eine neue Kollektion Eigenschaft in meiner Teilklassenerweiterung, wie:

public partial class ParentClass 
{ 
public List<ChildClass> children { get; set; } 
} 

bekam ich diese vage Annahme, dass EntitySet (Of Child) irgendeine Art von direkten Anschluss an die vollständige Datenbanktabelle hat. Und das sollte ich vielleicht als reines Datenzugriffsobjekt verwenden, und für Geschäftslogik sollte ich dieses andere Auflistungsobjekt behalten, das nur eine Teilmenge der Tabelle enthalten kann.

Aber ich bin mir nicht sicher, ob ich das Konzept völlig falsch verstanden habe? Ich mag es wirklich zu wissen, wie dies richtig verwendet werden sollte.


EDIT1:

Eine Sache, die möglicherweise ein Performance-Problem für mich ist, wenn es eine Datagridview meiner Objektsammlungen zu binden. Einige Eigenschaften werden häufig aus einem Börsen-Datenfeed aktualisiert, und ich frage mich, ob die Verwendung der EntitySets als Business-Layer-Sammlung dies verlangsamt. Obwohl ich nicht submitchanges auf diese Updates aufrufen. Trotzdem kann ich aufgrund der Updates nicht die Datagridview scrollen. Kann dies daran liegen, dass die EntitySets verwendet werden oder nur das Datagridview selbst so oft aktualisiert wird, dass das Scrollen unmöglich erscheint?

Antwort

0

Wenn Sie die vom Designer generierten Entitäten verwenden, die Proxy-Objekte und keine echten POCO-Objekte sind, können Sie auch deren ObjectSet verwenden, um die untergeordneten Sammlungen abzurufen. Sie sind vom Typ IQueryable, so dass bis Sie einen der Artikel berühren oder Sie eine ToList() - oder .Where() LinQ-Erweiterung verwenden, wird EF die Datenbank nicht aufrufen. Wie auch immer, BEST PRACTICE besteht darin, sie mit einer IList verfügbar zu machen und ein Repository zu verwenden, um die Liste zu füllen. Das ObjectSet ist nicht nur eine Liste, es ist auch eine Art Repository für die Entität.

+0

Danke! Ich wünschte, ich hätte deine Bedeutung genau verstanden; Mit "exponieren sie mit einem IList und ein Repository verwenden, um die Liste zu füllen", meinen Sie so etwas wie ersten Code Teil dieses Beispiels (http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with -linq-to.html), aber IList anstatt in diesem Beispiel IQueryable zurückgeben? – bretddog

+0

Moded diesen Kommentar zu EDIT1 oben .. – bretddog

+0

Wenn Sie IQueryable jedes Mal, wenn Sie einen Linq-Filter auf die Liste wie Where, Distinct und so weiter ... zurückgeben wird EF zurückrufen und die Datenbank – Raffaeu

Verwandte Themen