Trong bài viết này, bạn sẽ tạo một ứng dụng WCF RIA Services nhận dữ liệu từ AdventureWorksLT database. Bạn sẽ sử dụng Silverlight để tạo client trong tầng presentation. Và tạo các lớp entity class đại diện cho các bảng dữ liệu khác nhau. Bài viết này là bài khởi đầu cho một loạt các bài khác.
Visual Studio 2010
Silverlight 4
WCF RIA Services for Visual Studio 2010
AdventureWorksLT sample database
Trong Visual Studio, tạo mới một RIA Services project bằng cách chọn File, New, và sau đó là Project. Hộp thoại New Project xuất hiện.
Hãy chọn mẫu Silverlight Application và đặt tên cho project mới là RIAServicesExample.
Click OK.
Hộp thoại New Silverlight Application sẽ xuất hiện.
Hãy click chọn vào ô check box có tên là Enable WCF RIA Services.Khi bạn chọn check box này, thì bạn đã tạo một liên kết RIA Services giữa client project và server project.
Click OK để khởi tạo solution.
Bây giờ thì solution chứa hai projects: một client project và một server project. Client project có tên là RIAServicesExample và nó chứa mã Silverlight mà bạn dùng để tạo tầng presentation. Server project có tên là RIAServicesExample.Web và nó chứa phần code của tầng giữa(middle-tier).
Trong phần này, bạn sẽ khởi tạo các lớp ADO.NET Entity đại diện cho các lớp của AdventureWorksLT database. RIA Services làm việc với nhiều lớp mô hình dữ liệu và nhiều nguồn dữ liệu khác nhau.
Khi sử dụng một Entity Data Model với Visual Studio 2010, bạn phải chọn tùy chọn Include foreign key columns in the model. Mặc định thì lựa chọn này được tự động thêm vào khi bạn sử dụng Entity Data Model Wizard. Bạn cũng phải sử dụng behavior mặc định của thông tin mà Entity Data Model mapping nhúng vào trong assembly.
Trong cửa sổ Solution Explorer,click phải vào server project (RIAServicesExample.Web), chọn Add, và sau đó chọn New Item.
Hộp thoại Add New Item xuất hiện.
Trong hộp thoại đó, hãy chọn phần Data và sau đó chọn mẫu ADO.NET Entity Data Model.
Đặt tên cho tập tin mới là AdventureWorksModel.edmx và click Add.
Hộp thoại Entity Data Model Wizard xuất hiện.
Trong phần khung Choose Model Contents, hãy chọn Generate from database và click Next.
Trong phần khung Choose Your Data Connection, tạo một kết nối dữ liệu đến database và click Next.
Trong phần cửa sổ Choose Your Database Objects, hãy chọn các bảng Address, Customer, và CustomerAddress.
Click Finish. Lúc này mô hình Entity models đã được thiết lập.
Build solution.
Trong phần này, bạn sẽ thêm một domain service vào dự án tầng middle. Một domain service trình bày các data entity và các hoạt động của server project đến client project. Bạn có thể thêm business logic vào domain service để quản lí cách thức mà client tương tác với dữ liệu.
Click đôi vào server project, và chọn Add and New Item.
Trong danh sách hiện ra, hãy chọn Web trong phần khung bên trái và chọn Domain Service Class trong phần khung bên phải.
Đặt tên cho tập tin là CustomerDomainService.cs (hoặc là CustomerDomainService.vb).
Click Add.
Hộp thoại Add New Domain Service Class xuất hiện.
Hãy chắc là check box Enable client access được chọn.
Chọn Customer entity và sau đó chọn Enable Editing cho bảng Customer.
Và lớp domain service đã được tạo.
Hãy mở tập tin CustomerDomainService.cs (hay là CustomerDomainService.vb).
Lưu ý là tập tin này có các đặc điểm sau:
Lớp CustomerDomainService có từ LinqToEntitiesDomainService<TContext> là một lớp abstract base class trong RIA Services framework. Lớp cơ bản(base class) được sử dụng một cách tự động bởi vì domain service trình bày một lớp dữ liệu ADO.NET Entity.
Thường thì các base class liên kết với các entity class đã được tạo trong bước trước.
Lớp CustomerDomainService được đánh dấu với thuộc tính EnableClientAccessAttribute để xác định là nó được xuất hiện trong tầng client.
Một hàm query có tên là GetCustomers được tạo. Hàm này trả về mọi thành phần trong bảng Customers và không lọc hay sắp xếp gì cả.
Và còn tạo cả các phương thức insert, update, và delete các dòng dữ liệu.
Vừa rồi bạn đã thêm business logic trong domain service. Và bây giờ, bạn chỉ cần sử dụng phương thức GetCustomers đã tạo.
Bởi vì một liên kết RIA Services tồn tạu giữa client project và server project, các client proxy class được khởi tạo khi bạn build the solution. Những proxy class này cho phép bạn truy cập đến dữ liệu từ client.
Hãy Build solution.
Khi bạn build solution, thì code sẽ được tạo trong client project.
Trong cửa sổ Solution Explorer, click Show All Files dành cho client project. (Bạn hãy chọn client project là "Set as startup project")
Lưu ý là thư mục Generated_Code chứa một tập tin code .
Mở tập tin code trong thư mục Generated_Code.
Lưu ý là tập tin này có các đặc điểm như sau:
Một WebContext class kế thừa từ lớp WebContextBase đã được tạo.
Một CustomerDomainContext class được suy ra từ lớp DomainContext đã được tạo. Lớp này có một phương thức tên là GetCustomersQuery tương ứng với phương thức truy vấn đã được tạo trong domain service.
Một Customer class có nguồn gốc từ Entity class được tạo cho entity do domain service trình bày. Lớp Customer entity trong client project tương ứng với Customer entity trên server.
Hãy mở MainPage.xaml.
Từ thanh Toolbox, kéo một DataGrid control vào trong Grid element trong cửa sổ chứa mã XAML.
Một XML namespace và một reference đến một Data assembly được thêm vào một cách tự động khi bạn kéo DataGrid từ thanh. Nếu bạn thêm DataGrid mà không kéo nó từ Toolbox, thì bạn phải thêm một reference là System.Windows.Controls.Data assembly và một XML namespace cho xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data". Thí dụ này đã có XML namespace có tên là data, và bạn có thể thêm một cái tên khác cũng được.
Đặt tên cho DataGridCustomerGrid như đoạn code XAML dưới đây.
<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"> <data:DataGrid Name="CustomerGrid"></data:DataGrid> </Grid> </UserControl>
Mở tập tin code phía sau của MainPage.xaml.
Thêm câu lệnh using (C#) hay Imports (Visual Basic) cho namespace RIAServicesExample.Web và System.ServiceModel.DomainServices.Client namespace.
RIAServicesExample.Web namespace là tập tin code phía sau được khởi tạo cho client project.
Thêm đoạn code sau cho CustomerDomainContext, lấy các customers bằng cách gọi phương thức GetCustomersQuery, và kết nối kết quả vào trong DataGrid, như là đoạn code dưới đây:
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; } } }
Chạy ứng dụng.
Bạn sẽ thấy dữ liệu của data grid tương tự như sau.