Wiki


Wiki Table of Contents

Tags

Page Details

First published by:
Last revision by:
This page has not yet been rated

Walkthrough: Adding Query Methods

Các phương thức dùng để truy vấn dữ liệu từ dữ liệu nguồn đôi khi được gọi là các query method. Trong WCF RIA Services, các query method phải được xác định bằng cách mà framework xem chúng là query methods. Ngoài ra , các truy vấn luôn trả về một single entity được xác định khác với các truy vấn trả về nhiều giá trị. Để có thêm thông tin về query method, hãy xem  Domain Services.

Khi bạn tạo mới một lớp domain service và xác định các entity trong hộp thoại Add New Domain Service Class , thì RIA Services framework sẽ tự động tạo query method đơn giản cho từng entity được trình bày bởi service. Query method nhận tất cả các dòng của entity. Bài viết này mô tả làm cách nào để thêm một query methods mới, thực thi nhiều truy vấn sàng lọc phức tạp hơn bằng một giá trị tham số. Bài này cũng mô tả làm cách nào thêm một truy vấn trả về một giá trị entity và trả về một tập các entity.

 

Yêu cầu

Để thêm một query method với điều kiện vào là một tham số và trả về một entity duy nhất

  1. Mở solution đã lấy dữ liệu từ bảng Customer trong bài trước.

    Để có thêm thông tin, hãy xem tại liên kết này  Walkthrough: Creating a RIA Services Solution.

  2. Trong server project, hãy mở lớp domain service truy xuất dữ liệu từ bảng Customer.

    Tên của lớp domain service đã liệt kê trong phần yêu cầu là CustomerDomainService.

  3. Thêm một query method nhận một đối số kiểu integer và trả về một Customer entity có customer ID tương ứng.

    Nếu một  phương thức trả về một single entity bao gồm thuộc tính  QueryAttribute, thì bạn phải thiết lập thuộc tính  IsComposable thành false. Người dùng không thể thao tác thêm các truy vấn từ client. Nếu query method phù hợp với cấu trúc của một câu truy vấn, bạn không cần áp dụng thuộc tính QueryAttribute . Giá trị trả về phải là một instance duy nhất của một đối tượng entity.

    [Query(IsComposable=false)]
    public Customer GetCustomersByID(int customerID)
    {
        return this.ObjectContext.Customers.SingleOrDefault(
                c => c.CustomerID == customerID); }

Để thêm một query method có một đối số và trả về một tập các entity

  1. Trong server project, hãy mở lớp domain service truy xuất dữ liệu từ bảng Customer.

    Tên của lớp domain service đã liệt kê trong phần yêu cầu là CustomerDomainService.

  2. Trong domain service, thêm một query method có đầu vào là một tham số kiểu string và trả về bất kì customers nào có tên bắt đầu là một kí tự.

    Phương thức này có thể trả về một đối tượng  IQueryable<> bởi vì người dùng có thể muốn cung cấp thêm các thao tác truy vấn từ client.

    public IQueryable<Customer> GetCustomersByLastNameLetter(
                string startingLastNameLetter) { return this.ObjectContext.Customers.Where
                 (c => c.LastName.StartsWith(
                          startingLastNameLetter) == true); }

Để hiển thị kết quả của những query methods này trong client project.

  1. Trong client project, hãy mở MainPage.xaml.

  2. Thêm hai TextBox controls và hai Button controls để người dùng có thể lọc ra các customer bằng ID hay bằng kí tự đầu tiên của tên.

    Phần mã XAML sau trình bày một layout hoàn chỉnh với DataGrid đã có .

    <UserControl xmlns:data="clr-namespace:System.Windows.Controls;
                       assembly=System.Windows.Controls.Data
    " x:Class="RIAServicesExample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="25"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0"> <TextBlock Text="search by id: " ></TextBlock> <TextBox Name="IDValue" Width="50" ></TextBox> <Button Name="IDButton"
                   Click
    ="IDButton_Click" Content="Submit">
               
    </Button> </StackPanel> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1"> <TextBlock Text="search by name: "></TextBlock> <TextBox Name="LetterValue" Width="30"></TextBox> <Button Name="LetterButton" Click="LetterButton_Click"
                                      Content
    ="Submit"></Button> </StackPanel> <data:DataGrid Grid.Row="1" Grid.Column="0"
                   Grid.ColumnSpan="2" Name="CustomerGrid">
          </
    data:DataGrid> </Grid> </UserControl>
  1. Mở tập tin code phía sau của trang MainPage.xaml (MainPage.xaml.cs hay MainPage.xaml.vb).

  2. Thêm mã vào để nhận kết quả truy vấn dựa trên những gì mà người dùng nhập vào

    using System;
    using System.Windows;
    using System.Windows.Controls;
    using RIAServicesExample.Web;
    using System.ServiceModel.DomainServices.Client;
    
    namespace RIAServicesExample
    {
    
        public partial class MainPage : UserControl
        {
            private CustomerDomainContext _customerContext =
                              new CustomerDomainContext(); public MainPage() { InitializeComponent(); } private void LetterButton_Click(object sender, RoutedEventArgs e) { IDButton.IsEnabled = false; LetterButton.IsEnabled = false; LoadOperation<Customer> loadOp =
                 this
    ._customerContext.Load(
                 this._customerContext.GetCustomersByLastNameLetterQuery(
                 LetterValue.Text), CustomerLoadedCallback, null); CustomerGrid.ItemsSource = loadOp.Entities; } private void IDButton_Click(object sender, RoutedEventArgs e) { IDButton.IsEnabled = false; LetterButton.IsEnabled = false; LoadOperation<Customer> loadOp =
                   this._customerContext.Load(
                   this._customerContext.GetCustomersByIDQuery(
                   int.Parse(IDValue.Text)), CustomerLoadedCallback, null); CustomerGrid.ItemsSource = loadOp.Entities; } void CustomerLoadedCallback(
                LoadOperation<Customer> loadOperation) { IDButton.IsEnabled = true; LetterButton.IsEnabled = true; } } }
  3. Chạy ứng dụng.

    Và đây là hình mô tả danh sách các customers được lọc ra theo tên.

    Results of query method
Nguồn của bài viết và được dịch bởi kpopyo tại đây: http://msdn.microsoft.com/en-us/library/ee707362%28v=VS.91%29.aspx

Recent Comments

Leave the first comment for this page.