Exemplarische Vorgehensweise: Erstellen einer RIA Services-Projektmappe
In dieser exemplarischen Vorgehensweise erstellen Sie eine WCF RIA Services-Anwendung, die Daten von der AdventureWorksLT-Datenbank abruft und sie dann auf einem Silverlight-Client verfügbar macht, auf dem sie präsentiert werden. Sie greifen auf die Daten aus der Datenquelle zu, indem Sie Entitätsklassen erstellen, die verschiedene Datenbanktabellen auf dem Server in der mittleren Ebene darstellen. Anschließend präsentieren Sie die Daten durch Erstellen eines Domänendiensts, der diese Entitäten der mittleren Ebene für den Silverlight-Client zugreifbar macht. Diese exemplarische Vorgehensweise dient in der RIA Services -Dokumentation als Ausgangspunkt für viele andere exemplarische Vorgehensweisen.
Erforderliche Komponenten
Für diese und die anderen exemplarischen Vorgehensweisen in der RIA Services -Dokumentation müssen zusätzlich zu WCF RIA Services und dem WCF RIA Services-Toolkit mehrere erforderliche Programme installiert und korrekt konfiguriert werden, z. B. Visual Studio 2010, die Silverlight Developer-Laufzeit und das Silverlight-SDK. Zudem müssen Sie SQL Server 2008 R2 Express with Advanced Services installieren und konfigurieren und die AdventureWorks OLTP- und LT-Datenbanken installieren.
Ausführliche Anweisungen für jede dieser erforderlichen Komponenten finden Sie in den Themen unter Erforderliche Komponenten für WCF RIA Services. Folgen Sie den Anweisungen in diesen Themen, bevor Sie mit dieser exemplarischen Vorgehensweise fortfahren, um sicherzustellen, dass beim Ausführen der exemplarischen Vorgehensweisen für RIA Services so wenig Probleme wie möglich auftreten.
Erstellen einer Projektmappe mit einem RIA Services-Link zwischen den Projekten
So richten Sie eine RIA Services-Projektmappe ein
Erstellen Sie in Visual Studio 2010 ein neues RIA Services -Projekt, indem Sie Datei, Neu und dann Projekt auswählen.
Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie in der Gruppe Silverlight unter Installierte Vorlagen die Vorlage Silverlight-Anwendung aus, und geben Sie für das neue Projekt den Namen RIAServicesExample ein.
Klicken Sie auf OK.
Das Dialogfeld Neue Silverlight-Anwendung wird angezeigt.
Aktivieren Sie das Kontrollkästchen WCF RIA Services aktivieren im unteren Bereich des Dialogfelds. Durch Aktivieren dieses Kontrollkästchens wird ein RIA Services -Link zwischen dem Client- und dem Serverprojekt erstellt.
Klicken Sie auf OK, um die Projektmappe zu erstellen.
Die Projektmappe enthält zwei Projekte: ein Client- und ein Serverprojekt. Das Clientprojekt trägt den Namen "RIAServicesExample", und es enthält den Silverlight-Code, mit dem Sie die Darstellungsebene erstellen. Das Serverprojekt trägt den Namen "RIAServicesExample.Web", und es enthält den Code der mittleren Ebene.
Erstellen von Datenmodellen
In diesem Abschnitt erstellen Sie die ADO.NET-Entitätsklassen, die Daten von der AdventureWorksLT-Datenbank darstellen. RIA Services funktioniert mit einer Vielzahl von Datenmodellierungsklassen und Datenquellen. Weitere Informationen zu den Optionen für den Zugriff auf Daten mit RIA Services finden Sie im Thema Daten.
Vorsicht: |
---|
Wenn Sie ein Entity Data Model (EMD) mit Visual Studio 2010 verwenden, müssen Sie das Kontrollkästchen Fremdschlüsselspalten in das Modell einbeziehen aktivieren. Standardmäßig wird diese Option aktiviert, wenn Sie den Assistenten für Entity Data Model verwenden. Sie müssen auch das Standardverhalten für die Einbettung von EMD-Zuordnungsinformationen in die Assembly verwenden. |
So machen Sie Daten in der mittleren Ebene verfügbar
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Serverprojekt (RIAServicesExample.Web), wählen Sie Hinzufügen und dann Neues Element aus.
Das Dialogfeld Neues Element hinzufügen wird angezeigt.
Wählen Sie in der Liste der Kategorien die Option Daten und anschließend die Vorlage ADO.NET Entity Data Model aus.
Nennen Sie die neue Datei AdventureWorksModel.edmx, und klicken Sie anschließend auf Hinzufügen.
Der Assistent für Entity Data Model wird angezeigt.
Wählen Sie im Bildschirm Modellinhalt auswählen die Option Aus Datenbank generieren aus, und klicken Sie anschließend auf Weiter.
Erstellen Sie im Bildschirm Wählen Sie Ihre Datenverbindung aus eine Datenverbindung mit der Datenbank, und klicken Sie auf Weiter.
Wählen Sie im Bildschirm Wählen Sie Ihre Datenverbindung aus die Tabellen Address, Customer und CustomerAddress aus.
Überprüfen Sie, ob dass das Kontrollkästchen Fremdschlüsselspalten in das Modell einbeziehen standardmäßig aktiviert ist, und klicken Sie auf Fertig stellen.
Entitätsmodelle werden für die Tabellen erstellt.
Erstellen Sie die Projektmappe (mit der Tastenkombination STRG+UMSCHALT+B).
Erstellen eines Domänendiensts
In diesem Abschnitt fügen Sie dem Projekt der mittleren Ebene einen Domänendienst hinzu. Ein Domänendienst macht die Datenentitäten und Vorgänge im Serverprojekt für das Clientprojekt verfügbar. Sie können dem Domänendienst eine Geschäftslogik hinzufügen, um die Interaktion des Clients mit den Daten zu verwalten.
So erstellen Sie den Domänendienst
Klicken Sie mit der rechten Maustaste auf das Serverprojekt, und wählen Sie Hinzufügen und Neues Element aus.
Wählen Sie in der Liste der Kategorien Web aus, und wählen Sie dann die Vorlage Domänendienstklasse aus.
Nennen Sie die Klasse CustomerDomainService.cs (oder CustomerDomainService.vb).
Klicken Sie auf Hinzufügen.
Das Dialogfeld Neue Domänendienstklasse hinzufügen wird angezeigt.
Stellen Sie sicher, dass das Kontrollkästchen Clientzugriff aktivieren aktiviert ist.
Wählen Sie die Entität Customer aus, und aktivieren Sie dann dafür das Kontrollkästchen Bearbeitung aktivieren.
Klicken Sie auf OK.
Die
CustomerDomainService
-Klasse wird in einer neuen Datei mit dem Namen "CustomerDomainService.cs" (oder "CustomerDomainService.vb") generiert.Öffnen Sie diese Datei. Die Datei weist die folgenden Eigenschaften auf:
Die
CustomerDomainService
-Klasse leitet sich von der LinqToEntitiesDomainService-Klasse ab, bei der es sich um eine abstrakte Basisklasse im RIA Services -Framework handelt. Diese Basisklasse wurde automatisch verwendet, da der Domänendienst eine ADO.NET-Entitätsdatenklasse verfügbar macht.Die generische Basisklasse wird an die Entitätsklasse gebunden, die zuvor von den
AdventureWorksLTEntities
des Typs ObjectContext im generischen Parameter erstellt wurde.Die
CustomerDomainService
-Klasse wird mit dem EnableClientAccessAttribute-Attribut markiert, um anzugeben, dass es für die Clientebene sichtbar ist.Eine Abfragemethode mit dem Namen
GetCustomers
wird generiert. Diese Methode gibt jedes Element ohne Filterung oder Sortierung zurück.Methoden zum Einfügen, Aktualisieren und Löschen von Kunden aus den Datensätzen wurden generiert.
Erstellen des Silverlight-Clients
In anderen exemplarischen Vorgehensweisen erfahren Sie, wie dem Domänendienst Geschäftslogik hinzugefügt wird. Für diese exemplarische Vorgehensweise verwenden Sie einfach die standardmäßig generierte GetCustomers
-Methode.
Clientproxyklassen werden generiert, wenn Sie die Projektmappe erstellt haben. Der Link RIA Services , der zwischen dem Client- und dem Serverprojekt eingerichtet wurde, ermöglicht diese Codegenerierung. Diese Clientproxyklassen bieten Zugriff auf die Daten vom Client.
So zeigen Sie die generierten Clientproxyklassen an
Erstellen Sie die Projektmappe.
Wenn Sie die Projektmappe erstellen, wird Code im Clientprojekt generiert.
Wählen Sie im Projektmappen-Explorer das Clientprojekt RIAServicesExample aus, und klicken Sie am oberen Fensterrand auf das Symbol Alle Dateien anzeigen.
Der Ordner "Generated_Code" beinhaltet eine Datei mit dem Namen "RIAServicesExample.Web.g.cs" (oder "RIAServicesExample.Web.g.vb").
Öffnen Sie die Codedatei im Ordner "Generated_Code".
Die Datei weist die folgenden Eigenschaften auf:
Eine
WebContext
-Klasse, die von der WebContextBase-Klasse abgeleitet wird, wird generiert.Eine
CustomerDomainContext
-Klasse, die von der DomainContext-Klasse abgeleitet wird, wird generiert. Diese Klasse verfügt über die MethodeGetCustomersQuery
, die der im Domänendienst erstellten Abfragemethode entspricht.Eine
Customer
-Klasse, die sich von der Entity-Klasse ableitet, wird für die vom Domänendienst verfügbar gemachte Entität generiert. DieCustomer
-Entitätsklasse im Clientprojekt entspricht derCustomer
-Entität auf dem Server.
So zeigen Sie die Daten im Silverlight-Client an
Öffnen Sie die Datei "MainPage.xaml".
Ziehen Sie von der Toolbox auf der linken Seite ein DataGrid-Steuerelement in das Grid-Element in der XAML-Ansicht.
Durch Ziehen des DataGrid-Steuerelements von der Toolbox werden eine
using System.Windows.Controls
-Anweisung im Namespace und ein Verweis auf eine System.Windows.Controls.Data-Assembly automatisch hinzugefügt.Vorsicht: Wenn Sie das DataGrid hinzufügen, ohne es von der Toolbox zu ziehen, muss der Verweis auf die System.Windows.Controls.Data-Assembly dem Clientprojekt und der using-Anweisung in der CodeBehind-Datei manuell hinzugefügt werden. Ändern Sie den Wert von
AutoGeneratedColums
in True, nennen Sie dasDataGrid
-ElementCustomerGrid
, und passen Sie das Höhen- und Breitenattribut wie im folgenden XAML dargestellt an.<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="RIAServicesExample.MainPage" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid Name="CustomerGrid"></data:DataGrid> </Grid> </UserControl>
Öffnen Sie die CodeBehind-Datei für "MainPage.xaml".
Fügen Sie
using
(C#) oderImports
(Visual Basic) zwei Anweisungen hinzu:using RIAServicesExample.Web;
undusing System.ServiceModel.DomainServices.Client;
.Der RIAServicesExample.Web-Namespace ist der Namespace, der den generierten Code für das Clientprojekt in der Datei "RIAServicesExample.Web.g.cs" (oder "RIAServicesExample.Web.g.vb") enthält.
Zur Instanziierung von
CustomerDomainContext
muss die Codezeileprivate CustomerDomainContext _customerContext = new CustomerDomainContext();
in derMainPage
-Klasse hinzugefügt werden.Imports System.ServiceModel.DomainServices.Client Imports RIAServicesExample.Web Partial Public Class MainPage Inherits UserControl Private _customerContext As New CustomerDomainContext Public Sub New() InitializeComponent() Dim loadOp = Me._customerContext.Load(Me._customerContext.GetCustomersQuery()) CustomerGrid.ItemsSource = loadOp.Entities End Sub End Class
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using RIAServicesExample.Web; using System.ServiceModel.DomainServices.Client; namespace RIAServicesExample { public partial class MainPage : UserControl { private CustomerDomainContext _customerContext = new CustomerDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery()); CustomerGrid.ItemsSource = loadOp.Entities; } } }
Rufen Sie Kundenentitäten ab, indem Sie die
GetCustomersQuery
-Methode mit LoadOperation aufrufen:LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
.Binden Sie die in das DataGrid geladenen Entitäten mit
CustomerGrid.ItemsSource = loadOp.Entities;
.Zusammenfassung: Die Datei "MainPage.xaml.cs" sollte nun den folgenden Code enthalten:
//Namespaces added using RIAServicesExample.Web; using System.ServiceModel.DomainServices.Client; namespace RIAServicesExample { public partial class MainPage : UserControl { private CustomerDomainContext _customerContext = new CustomerDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery()); CustomerGrid.ItemsSource = loadOp.Entities; } } }
Führen Sie die Anwendung aus (F5).
Ein Datenraster wird angezeigt, das ungefähr folgendermaßen aussieht:
Nächste Schritte
In dieser exemplarischen Vorgehensweise wurden nur die grundlegenden Schritte erläutert, um ein Projekt zu erstellen und ungefilterte Daten aus einem Domänendienst abzurufen. Hier finden Sie einige Vorschläge dazu, wie Sie sich mit weiteren Funktionen vertraut machen können:
Erstellen Sie benutzerdefinierte Abfragemethoden (z. B. Abfragen, die einen Parameter akzeptieren), die in der Regel zum Filtern von Daten verwendet werden. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Hinzufügen von Abfragemethoden.
Fügen Sie einem Domänendienst Geschäftslogik hinzu, der Update-, Einfüge- und Löschmethoden enthält, und mit dem der Prozess der Datenänderung gesteuert wird. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen der Geschäftslogik zum Domänendienst.