Frage

Bei einer Abfrage wie:

SELECT table1.field1 FirstField, table2.field2 SecondField
    FROM table1
    INNER JOIN table2 ON table1.FK = table2.PK
    WHERE table1.somefield = 'somevalue';

Mein Ziel ist es, eine stark typisierte Ergebnismenge mit .netTiers zurückzukehren. Ich gehe davon aus, dass ich nicht eine Ansicht, weil die WHERE Klausel einen Parameter verwenden kann, muss, die sich nicht auf eine Ansicht übergeben werden. Eine gespeicherte Prozedur kann die ‚somevalue‘ Parameter übergeben werden, sondern liefert eine schwach typisierte DataSet oder DataReader.

Ich denke, ich bin nur ein Konzept fehlt hier. Nur klar sein, was ich würde gerne mit, um am Ende in der Lage sein, so etwas zu schreiben:

TList <some-entity-name> entityList = DataRepository.SomeProvider.Get( "somevalue" );

foreach ( some-entity-name entity in entityList ) {
    DoSomethingWith( entity.FirstField, entity.SecondField );
}

Ich möchte eine Lösung vermeiden, die eine serverseitige Filter beinhaltet, nachdem die Abfrage ausgeführt hat; die beteiligten Tabellen sind sehr groß.

War es hilfreich?

Lösung

Erstellen Sie eine Ansicht verwenden, stark typisierte ParameterBuilder Objekt den Blick auf die bestimmte Spalte zu filtern. Ich kann mich nicht mehr genau erinnern, welche Schicht wird diese Aufgabe.

Dies ist, wie Sie es verwenden würden:

MyViewParameterBuilder builder = new MyViewParameterBuilder();
builder.AppendEquals(TableColumn.Column, "value");
DataRepository.MyViewEntityProvider.Find(builder.GetParameters());

ich kann ich irren, aber ich glaube nicht, net-Ebene tatsächlich ‚Filter‘ der TList / VList Objekt mit dem oben beschriebenen Verfahren, das ist das, was der Name des Objekts vermuten wäre. Der Builder generiert dort, wo Klausel und NetTiers läuft eine Abfrage der Datenbank diese Klausel verwendet wird.

Ihre zweite Option ist eine gespeicherte Prozedur, um zu versuchen zu erzeugen, aber nur, wenn das Ergebnis Ihres gespeicherten proc entspricht das Schema einer der Tabellen in Ihrer Datenbank. Ansonsten Netzebene werden nicht wissen, wie man sich gegen sie zu erzeugen. Sie können mehr auf dem hier

Andere Tipps

Wenn Sie eine TList Sammlung mit einem Join Sie eine benutzerdefinierte gespeicherte Prozedur erstellen müssen. Lösung hier: http://benpowell.org/ Paging-und Sortier-in-a-NetTiers-custom-gespeichert-Prozedur /

Wenn Sie Szenario wie folgt aus:

  • Konto (PK AccountId)
  • Client (PK ClientId)
  • ClientAccount (PK ClientId, AccountId)

Solange Sie die richtigen Fremdschlüssel eingerichtet haben, .NetTiers werden Sie mit dem entsprechenden Verfahren bieten:

AccountService s = new AccountService();
TList<Account> accountCollection = s.GetByClientIdFromClientAccount(1);

Es gibt auch eine überladene Methode erzeugt, unterstützt Paging (leider keine orderBy Klausel).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top