2009-03-11 2 views
0

Was ist der beste Weg, um dies zu handhaben Ich habe eine Anwendung, wo ich ständig 12 Monate Datensätze in ein Jahr Record/Objekt zu "schwenken", um ein einzelnes Jahr pro anzuzeigen Zeile in einem DataGrid. Ich habe diese Arbeit bis zu diesem Punkt in DataSets mit etwas hässlichem T-SQL gemacht, um den Drehpunkt zu erreichen.NHibernate - 12 Monate/1 Jahr und DataBinding

Ich aktualisiere diese Anwendung jetzt auf NHibernate und das ist der einzige Problempunkt, den ich habe.

Als Beispiel, sagen wir, ich habe einen Test, den ich einer Gruppe von Studenten einmal im Monat geben. Meine DDL könnte wie folgt aussehen:

CREATE TABLE [Score](
    [ScoreId] [int] IDENTITY(1,1) NOT NULL, 
    [StudentId] [int] NOT NULL, 
    [Year] [int] NOT NULL, -- 4 digit year as an int 
    [Month] [int] NOT NULL, -- 1 through 12 month value as int 
    [TestScore] [int] NOT NULL 
) 

Ich möchte in einem Datagrid (ein Datensatz pro Schüler/Jahr) diese Felder angezeigt werden:
Schülername, Jahr, Jan, Feb, März, April, Mai , Jun, Jul, Aug., Sep., Okt., Nov., Dez.,

Wie sieht die normale Vorgehensweise bei dieser Art von Aufgabe mit NHibernate aus? Wie würden Sie damit umgehen?

Antwort

1

Meiner Meinung nach ist es besser, NHibernate als reines ORM zu verwenden und die Pivotierung Ihrem Code zu überlassen. Das bedeutet, dass Sie NHibernate verwenden, um die Zeile in der Tabelle wie in einer Klasse mit einer Eins-zu-Eins-Beziehung zu den Tabellenspalten zu lesen und dann eine Methode für die Klasse (oder eine Eigenschaft mit einer Logik im Getter) zu verwenden mach das Schwenken.

In einer reinen DDD sollten Sie dazu einen Dienst verwenden (anstatt diese Logik in das Domänenobjekt zu schreiben).

Danach können Sie die Ergebnisse an ein Raster für die Präsentation binden.

+0

Also wenn ich verstehe, dass Sie das Elternobjekt und die 12 untergeordneten Objekte (Monate) korrekt ziehen und etwas wie eine Serviceebene verwenden, um eine freundlichere Menge von "Facade" -Objekten zum Binden zurückzugeben? – BuddyJoe

+0

Ich realisierte, nachdem ich diese Frage gestellt hatte ... was, wenn ich dieses Monat Problem nicht hatte, aber noch jedes "Maß" bezogen auf ein Student-Objekt hatte. Gibt es eine einfache Möglichkeit, das an ein DataGrid zu binden? Habe noch kein Eltern/Kind oder 1-zu-1 Grid gemacht. In dieser DataTable/DataSet-Welt zu lange gewesen. – BuddyJoe

+0

Das native Datenraster ist in dieser Hinsicht nicht sehr flexibel. Ich würde sagen, wenn Sie so etwas wie Master/Detail-Grids machen wollen, gehen Sie für eine komplexere Datengrid-Kontrolle wie Infragistics oder DevExpress. – Khash

0

Ich dachte, ich würde dies zu der Konversation hinzufügen.

Diese thread spricht über das Übersteuern der ToString() einer Klasse. Ich denke, ich könnte dies für meine MonthValue-Objekte tun ... einfach die Ergebnisse über ToString() zurückgeben;

Dies löst jedoch nicht das Zuordnungsproblem. Nach anderen Kommentaren zu dieser Frage funktionierte die Punktsyntax für mich im DataPropertyName nicht.