Gewusst wie: Hinzufügen der Geschäftslogik zum Domänendienst

WCF RIA Services

In diesem Thema erfahren Sie, wie Sie einem Domänendienst in einer RIA Services -Anwendung Geschäftslogik hinzufügen. Ein RIA Services -Domänendienst enthält standardmäßig Update-, Einfüge- und Löschmethoden, häufig müssen Sie jedoch zusätzliche Geschäftslogik zum Ändern der Daten hinzufügen. Es kann auch vorkommen, dass Sie Methoden zum Ausführen von Vorgängen hinzufügen müssen, bei denen es sich nicht um die herkömmlichen Abfrage-, Update-, Einfüge- oder Löschmethoden handelt. In diesem Thema erfahren Sie, wie Datenvorgänge geändert werden, um bestimmte Geschäftsanforderungen zu erfüllen. Das Hinzufügen einer benannten Updatemethode und eines Startvorgangs wird ebenfalls erläutert.

So fügen Sie Datenänderungsmethoden Geschäftslogik hinzu

  1. Erstellen Sie die Update-, Einfüge- oder Löschmethoden, die Sie in der Anwendung benötigen.

    Zum Erstellen dieser Methoden können Sie entweder beim Generieren des Domänendiensts im Dialogfeld Neue Domänendienstklasse hinzufügen die Option Bearbeitung aktivieren auswählen oder die Methoden hinzufügen, die der erwarteten Signatur für den Vorgang entsprechen. Weitere Informationen finden Sie unter Domänendienste.

  2. Fügen Sie in den Update-, Einfüge- oder Löschmethoden Code für die Logik zum Verarbeiten der Anforderung hinzu.

  3. Fügen Sie alle weiteren Methoden hinzu, die für die Geschäftsanforderungen erforderlich sind. Verwenden Sie das IgnoreAttribute-Attribut, wenn die Methode nicht als Dienst verfügbar gemacht werden soll.

    Das folgende Beispiel zeigt eine Einfügemethode, durch die der Vertriebsmitarbeiter zugewiesen wird, wenn keine Zuweisung vorhanden ist. Die RetrieveSalesPersonForCompany-Methode ruft den Namen des Vertriebsmitarbeiters für ein Unternehmen ab, wenn ein Kunde dieses Unternehmens in der Datenbank vorhanden ist. Die Methode wird mit dem IgnoreAttribute-Attribut markiert, um zu verhindern, dass sie vom Client als Dienst aufgerufen wird.

    Public Sub InsertCustomer(ByVal customer As Customer)
        If (customer.SalesPerson = String.Empty) Then
            customer.SalesPerson = RetrieveSalesPersonForCompany(customer.CompanyName)
        End If
    
        If ((customer.EntityState = EntityState.Detached) _
                    = False) Then
            Me.ObjectContext.ObjectStateManager.ChangeObjectState(customer, EntityState.Added)
        Else
            Me.ObjectContext.Customers.AddObject(customer)
        End If
    End Sub
    
    <Ignore()> _
    Public Function RetrieveSalesPersonForCompany(ByVal companyname As String) As String
        Dim salesPersonToAssign As String = "unassigned"
    
        Dim customers As List(Of Customer)
        customers = GetCustomers().Where(Function(c) c.CompanyName = companyname).ToList()
    
        If (customers.Count > 0) Then
            salesPersonToAssign = customers.First().SalesPerson
        End If
    
        Return salesPersonToAssign
    End Function
    
    
    public void InsertCustomer(Customer customer)
    {
        if (customer.SalesPerson == String.Empty)
        {
            customer.SalesPerson = RetrieveSalesPersonForCompany(customer.CompanyName);
        }
    
        if ((customer.EntityState != EntityState.Detached))
        {
            this.ObjectContext.ObjectStateManager.ChangeObjectState(customer, EntityState.Added);
        }
        else
        {
            this.ObjectContext.Customers.AddObject(customer);
        }
    }
    
    [Ignore]
    public string RetrieveSalesPersonForCompany(string companyname)
    {
        string salesPersonToAssign = "unassigned";
    
        List<Customer> customers = GetCustomers().Where(c => c.CompanyName == companyname).ToList();
        if (customers.Count > 0)
        {
            salesPersonToAssign = customers.First().SalesPerson;
        }
    
        return salesPersonToAssign;
    }
    
    

So fügen Sie eine benannte Updatemethode hinzu

  1. Fügen Sie in der Domänendienstklasse eine Methode hinzu, die der erwarteten Signatur für eine benannte Updatemethode entspricht.

    Die Methode sollte entweder mit dem UpdateAttribute-Attribut mit der UsingCustomMethod-Eigenschaftseinstellung true markiert werden oder keinen Wert zurückgeben und eine Entität als ersten Parameter akzeptieren.

    Das folgende Beispiel zeigt eine Methode, die es einem Benutzer in der Rolle CustomerRepresentative ermöglicht, das Kennwort eines Kunden zurückzusetzen.

    <RequiresRole("CustomerRepresentative")> _
    Public Sub ResetPassword(ByVal customer As Customer)
        ' Implement logic to reset password
    End Sub
    
    
    [RequiresRole("CustomerRepresentative")]
    public void ResetPassword(Customer customer)
    {
        // Implement logic to reset password
    }
    
    

    Wenn Sie eine benannte Updatemethode hinzufügen, werden zwei Methoden im Clientprojekt generiert: eine Methode im Domänenkontext und eine Methode für die Entität, die als Parameter für die benannte Updatemethode übergeben wird. Diese benannte Updatemethode wird auf dem Client ausgeführt, indem entweder die generierte Methode für den Domänenclient oder die generierte Methode für die Entität aufgerufen wird. Nachdem Sie eine der Methode aufgerufen haben, müssen Sie wie im folgenden Code dargestellt die SubmitChanges-Methode aufrufen.

    selectedCustomer.ResetPassword()
    customerContext.SubmitChanges(AddressOf OnSubmitCompleted, Nothing)
    

    selectedCustomer.ResetPassword();
    customerContext.SubmitChanges(OnSubmitCompleted, null);
    

So fügen Sie einen Startvorgang hinzu

  1. Fügen Sie in der Domänendienstklasse eine mit dem InvokeAttribute-Attribut markierte Methode hinzu.

    Das folgende Beispiel zeigt eine Methode, die die lokale Temperatur basierend auf der Postleitzahl abruft.

    <Invoke()> _
    Public Function GetLocalTemperature(ByVal postalcode As String) As Integer
        ' Implement logic to look up temperature
    End Function
    
    
    [Invoke]
    public int GetLocalTemperature(string postalcode)
    {
        // Implement logic to look up temperature
    }
    
    

    Die Methode wird wie im folgenden Code dargestellt mit einem InvokeOperation-Objekt aufgerufen.

    Dim invokeOp As InvokeOperation(Of Integer)
    invokeOp = customerContext.GetLocalTemperature(selectedPostalCode)
    

    InvokeOperation<int> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode);
    
Anzeigen: