Mit der ObjectDataSource in asp.net2.0 können Datenanzeigesteuerelemente wie GridView für die Anzeige und Bearbeitung gebunden werden. Es unterstützt auch integriertes Paging, Sortieren usw. Nach der Verwendung des ORM können Sie auch ObjectDataSource verwenden.
Beim Paging werden hier nicht mehr alle Seiten aus der Datenbank entnommen und dann selektiv gebunden, sondern die Seiten werden direkt aus der Datenbank entnommen und dann gebunden. Der Unterschied ist immer noch riesig und die Effizienz ist erheblich verbessert.
Bearbeiten, Erstellen und Sortieren werden alle direkt von ObjectDataSource bereitgestellt, und es ist nicht erforderlich, Code in GridView zu schreiben.
Auf diese Weise kann das Objektdesign zumindest für Datenbankoperationen viel Logik enthalten und die Benutzeroberfläche erscheint relativ einfach. Wenn Sie es abziehen und ein wenig öffnen, ist es vorteilhafter, es zu gewinnen in Zukunft installieren oder daraus einen SmartClient machen.
Hier ist ein Blog, der besser spricht: http://www.evosoftworks.com/Articles/wormods.aspx .
Ich habe zufällig WilsonORM verwendet, also habe ich entsprechend eines erstellt.
Der Grundaufbau ist wie folgt:
UI (GridView und andere Steuerelemente – ObjectDataSource-Steuerelement) ----〉ObjectDataSource-Klasse (Objekt, CRUD-Paging und andere Logik schreiben) ---〉 (ORM implementiert CRUD) ---〉DB
hat mehrere Hauptschritte
1: Fügen Sie dem Objekt Eigenschaften und Methoden hinzu, um CRUD, Paging und andere Logik zu vervollständigen
2: Konfigurieren Sie UI-Steuerelemente wie GridView für die Verbindung mit dem ObjectDataSource-Steuerelement.
Schauen wir uns zunächst den ersten an
1: Fügen Sie dem Objekt Eigenschaften und Methoden hinzu, um CRUD, Paging und andere Logik zu vervollständigen. Die Object-Klasse wird vom Tool basierend auf der DB-Struktur generiert, und die Mapping-Datei wird ebenfalls generiert.
Fügen Sie dem Objekt zunächst ein Identifikationsattribut DataObject() im System.ComponentModel-Namespace [DataObject()] hinzu.
öffentliche Klasse ProductDescription
{Zweitens fügen Sie dieser Objektklasse CRUD-Methoden hinzu.
Schauen wir uns zunächst eine Insert-Methode an
[DataObjectMethod(DataObjectMethodType.Insert)]
public static void Insert(ProductDescription productDescription)
{
versuchen
{
Manager.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manager.DataManager.PersistChanges(productDescription);
}
Catch (Ausnahme ex)
{
log.Error(ex);
}
} Dieser Methode muss ein [DataObjectMethod(DataObjectMethodType.Insert)]-Attribut vorangestellt werden, das angibt, dass es sich um die Insert-Methode handelt.
Diese Methode ist eine statische öffentliche Methode.
Der Parameter ist eine Instanz des Objekts selbst. Das ist besser, weil die Logik leicht zu verstehen ist und alles auf dem Objekt basiert.
Auch die übrigen Methoden „Delete“ und „Update“ sind auf diese Weise geschrieben.
Dann werfen Sie einen Blick auf die Select-Methode, die etwas ganz Besonderes ist.
Methode auswählen
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause)
3 {
4 Versuchen
5 {
6 int numPages = 0;
7 if (sortClause == null || sortClause == "")
8 sortClause = "ModifiedDate Desc";
9 Collection<ProductDescription> cs;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 Return-CS;
13}
14 Fang (Ausnahme ex)
15 {
16 log.Error(ex);
17 null zurückgeben;
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 statisches öffentliches ObjectSet Retrieve(string Key, string Value)
zweiundzwanzig {
23 if (Wert == null || Wert == "")
24 null zurückgeben;
25 Versuche
26 {
27 QueryHelper helper = Manager.DataManager.QueryHelper;
28 Key = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Key);
29 ObjectQuery query = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Key, Value), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(query);
31 Rückgabeobjekt;
32}
33 Fang (Ausnahme ex)
34 {
35 log.Error(ex);
36 null zurückgeben;
37 }
38 }
39
40 public int RecCount(string query, int maxRows, int startRowIndex, string sortClause)
41 {
42 return _numRecs;
43}
44
45 öffentliche statische Sammlung<ProductDescription> RetrievePage(string whereClause, string sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 ObjectQuery<ProductDescription> query = new ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(query);
49 pageCount = pageSet.PageCount;
50 RückgabeseitenSet;
51 } Die erste Methode ist public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause), eine Methode, die integriertes Paging und Sortieren implementieren kann. Es ist zu beachten, dass dieser Code _numRecs = ((IObjectPage)cs).TotalCount; Hier wird die Gesamtzahl der Seiten sofort herausgenommen. Dies wird verwendet, um die Seitenzahl entsprechend anzuzeigen. string query, int maxRows, int startRowIndex, string sortClause) werden verwendet, um die Anzahl der Datensätze abzurufen. Beachten Sie, dass diese beiden Methoden übereinstimmen müssen und die Parameter gleich sind.
Die zweite Methode, static public ObjectSet Retrieve(string Key, string Value), ruft einfach einen Datensatz ab. Kann in der Anzeige von DetailView/FormView verwendet werden.
Obwohl der Code umfangreich zu sein scheint, ist er tatsächlich sehr strukturiert, sodass Sie CodeSmith verwenden oder das ORMHelper-Tool direkt ändern können, um ihn dynamisch zu generieren, ohne Code manuell schreiben zu müssen.
Mit diesen vier Methoden sind CRUD, Paging und Sortierung abgeschlossen. Ein solches Objekt hat nichts mit der Benutzeroberfläche zu tun, sondern nur mit der Datenlogik.
2: UI-Konfiguration. Die UI-Konfiguration ist außerdem in zwei Ebenen unterteilt: GridView und andere Anzeigesteuerelemente;
Konfigurieren Sie nun die Objektdatenquelle für Steuerelemente wie GridView und stellen Sie eine direkte Verbindung zum Objekt her, um Funktionen wie Anzeige und Bearbeitung zu implementieren. Tatsächlich geht es darum, eine mit der ObjectDataSource verbundene Eigenschaft festzulegen.
<asp:GridView ID="gv_data" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="ods_list"
Dies ist die Konfiguration des ObjectDataSource-Steuerelements
ObjectDataSource
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Delete" OldValuesParameterFormatString="original_{0}" SelectMethod="Retrieve"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Update" SortParameterName="sortClause"
4 MaximumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <Parameter auswählen>
7 <asp:Parameter Name="query" Type="String" />
8 <asp:Parameter Name="maxRows" Type="Int32" />
9 <asp:Parameter Name="startRowIndex" Type="Int32" />
10 <asp:Parameter Name="sortClause" Type="String" />
11 </SelectParameters>
12</asp:ObjectDataSource>
Schauen Sie sich die darin enthaltenen Eigenschaften an, bei denen es sich um die Parameter zum Konfigurieren der CRUD-Methode und den entsprechenden Methodennamen handelt. Genau diese setzen wir in der Klasse um. Die Löschmethode wird beispielsweise hier konfiguriert: DeleteMethod="Delete"; und hier ist das Attribut der Anzahl der Datensätze, die gerade erwähnt wurden: SelectCountMethod="RecCount" und so weiter.
Wie übergebe ich hier die Parameter? Systembezogene Attribute werden vom System übergeben, zum Beispiel maxRows, startRowIndex usw.; sie können auch per Code übergeben werden: this.ods_list.SelectParameters["query"].DefaultValue = query