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.

So richten Sie eine RIA Services-Projektmappe ein

  1. 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.

  2. 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.

    RIA_StartProject

  3. Klicken Sie auf OK.

    Das Dialogfeld Neue Silverlight-Anwendung wird angezeigt.

  4. 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.

    RIA_CreateProjectwithLink

  5. 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.

    RIA_ProjectsCreated

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.

CautionVorsicht:
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

  1. 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.

  2. Wählen Sie in der Liste der Kategorien die Option Daten und anschließend die Vorlage ADO.NET Entity Data Model aus.

  3. Nennen Sie die neue Datei AdventureWorksModel.edmx, und klicken Sie anschließend auf Hinzufügen.

    Der Assistent für Entity Data Model wird angezeigt.

  4. Wählen Sie im Bildschirm Modellinhalt auswählen die Option Aus Datenbank generieren aus, und klicken Sie anschließend auf Weiter.

  5. Erstellen Sie im Bildschirm Wählen Sie Ihre Datenverbindung aus eine Datenverbindung mit der Datenbank, und klicken Sie auf Weiter.

  6. Wählen Sie im Bildschirm Wählen Sie Ihre Datenverbindung aus die Tabellen Address, Customer und CustomerAddress aus.

  7. Ü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.

  8. 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

  1. Klicken Sie mit der rechten Maustaste auf das Serverprojekt, und wählen Sie Hinzufügen und Neues Element aus.

  2. Wählen Sie in der Liste der Kategorien Web aus, und wählen Sie dann die Vorlage Domänendienstklasse aus.

  3. Nennen Sie die Klasse CustomerDomainService.cs (oder CustomerDomainService.vb).

    RIA_AddDomainService

  4. Klicken Sie auf Hinzufügen.

    Das Dialogfeld Neue Domänendienstklasse hinzufügen wird angezeigt.

  5. Stellen Sie sicher, dass das Kontrollkästchen Clientzugriff aktivieren aktiviert ist.

  6. Wählen Sie die Entität Customer aus, und aktivieren Sie dann dafür das Kontrollkästchen Bearbeitung aktivieren.

    RIA_AddEntity

  7. Klicken Sie auf OK.

    Die CustomerDomainService-Klasse wird in einer neuen Datei mit dem Namen "CustomerDomainService.cs" (oder "CustomerDomainService.vb") generiert.

  8. Ö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

  1. Erstellen Sie die Projektmappe.

    Wenn Sie die Projektmappe erstellen, wird Code im Clientprojekt generiert.

  2. 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").

    RIA_GeneratedCode

  3. Ö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 Methode GetCustomersQuery, 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. Die Customer-Entitätsklasse im Clientprojekt entspricht der Customer-Entität auf dem Server.

So zeigen Sie die Daten im Silverlight-Client an

  1. Öffnen Sie die Datei "MainPage.xaml".

  2. 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.

    CautionVorsicht:
    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.
  3. Ändern Sie den Wert von AutoGeneratedColums in True, nennen Sie das DataGrid-Element CustomerGrid, 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>
    
  4. Öffnen Sie die CodeBehind-Datei für "MainPage.xaml".

  5. Fügen Sie using (C#) oder Imports (Visual Basic) zwei Anweisungen hinzu: using RIAServicesExample.Web; und using 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.

  6. Zur Instanziierung von CustomerDomainContext muss die Codezeile private CustomerDomainContext _customerContext = new CustomerDomainContext(); in der MainPage-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;
            }
        }
    }
    
  7. Rufen Sie Kundenentitäten ab, indem Sie die GetCustomersQuery-Methode mit LoadOperation aufrufen: LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());.

  8. 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;
            }
        }
    }
    
  9. Führen Sie die Anwendung aus (F5).

    Ein Datenraster wird angezeigt, das ungefähr folgendermaßen aussieht:

    RIA_ResultsGrid

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: