Silverlight WCF RIA服务(九)Domain Service 2
演练:添加查询方法 查询数据源的方法有时被叫做查询方法。在WCF RIA Services中,查询方法必须以框架承认的方式来定义。此外,只返回一个实体的查询和有可能返回多个实体的查询定义是不同的。 当我们建立一个新的domain service类并在Add New Domain Service Class 对
演练:添加查询方法
查询数据源的方法有时被叫做查询方法。在WCF RIA Services中,查询方法必须以框架承认的方式来定义。此外,只返回一个实体的查询和有可能返回多个实体的查询定义是不同的。
当我们建立一个新的domain service类并在Add New Domain Service Class 对话框中指定实体时,RIA Services框架会自动为每一个服务端公开的实体创建一个简单的查询。这个简单的查询方法检索实体的所有数据。这个演练将描述如何添加一个用参数值来过滤结果的复杂查询方法。还描述了如何添加一个返回单个实体和一个实体集合的查询。
添加一个接受参数并返回单一实体的查询方法
- 打开我们第三节中创建的RIAServicesExample解决方案。
- 在服务端,打开从Customer表公开数据的domain Services 类。这个类应该叫做CustmerDomainService。
- 添加一个查询方法,这个方法接受一个整数类型的参数并返回符合Customer ID的Customer实体。 如果返回单一实体的方法包含Query属性,必须设置IsComposable为false. 用户不能从客户端指定其他的查询操作。如果这个查询方法满足了作为查询所期望的签名,我们就不必使用[Query]属性。返回值必须是任何实体对象的单一实例。
12345678910111213141516171819202122[Query(IsComposable=false)]publicCustomer GetCustomersByID(intcustomerID){returnthis.ObjectContext.Customers.FirstOrDefault(c => c.CustomerID == customerID);}
添加一个接受一个参数并返回一个实体集合的查询方法
- 打开从Customer表公开数据的domain service类。名字应为CustomerDomainService。
- 添加一个方法,这个方法接受一个字符型参数并返回所有名字以参数开始的客户。这个方法可以返回一个IQueryable<>对象,因为用户可能想从客户端提供额外的查询。
123456789101112131415161718publicIQueryable<CUSTOMER> GetCustomersByLastNameLetter(stringstartingLastNameLetter){returnthis.ObjectContext.Customers.Where(c => c.LastName.StartsWith(startingLastNameLetter) ==true);}
在客户端显示这些查询的结果
- 在客户端打开MainPage.xaml文件。
- 添加两个TextBox控件和两个Button控件,这样用过就可以通过ID或名的首字母来过滤。下面的xaml代码显示了DataGrid的完整布局。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102<?XML:NAMESPACEPREFIX = [default]http://schemas.microsoft.com/winfx/2006/xaml/presentationNS="http://schemas.microsoft.com/winfx/2006/xaml/presentation"/><usercontrolclass=RIAServicesExample.MainPagexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"x="http://schemas.microsoft.com/winfx/2006/xaml"d="http://schemas.microsoft.com/expression/blend/2008"mc="http://schemas.openxmlformats.org/markup-compatibility/2006"ignorable="d"designwidth="400"designheight="300"><gridname="LayoutRoot"background="White"><grid.columndefinitions><columndefinition></columndefinition><columndefinition></columndefinition></grid.columndefinitions><grid.rowdefinitions><rowdefinitionheight="25"></rowdefinition><rowdefinition></rowdefinition></grid.rowdefinitions><stackpanelcolumn="0"row="0"orientation="Horizontal"><textblocktext="search by id: "></textblock><textboxname="IDValue"width="50"></textbox><BUTTONname=IDButtontype=submitclick="IDButton_Click"content="Submit"></BUTTON></stackpanel><stackpanelcolumn="1"row="0"orientation="Horizontal"><textblocktext="search by name: "></textblock><textboxname="LetterValue"width="30"></textbox><BUTTONname=LetterButtontype=submitclick="LetterButton_Click"content="Submit"></BUTTON></stackpanel><?xml:namespaceprefix=datans="http://www.google.com/2005/gml/data"/><data:datagridname="CustomerGrid"column="0"row="1"columnspan="2"></data:datagrid></grid></usercontrol>
- 打开MainPage.xaml的代码文件。
- 添加代码来根据用户的输入来检索数据。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130publicpartialclassMainPage : UserControl{privateCustomerDomainContext _customerContext =newCustomerDomainContext();publicMainPage(){InitializeComponent();}privatevoidLetterButton_Click(objectsender, RoutedEventArgs e){IDButton.IsEnabled =false;LetterButton.IsEnabled =false;LoadOperation<?XML:NAMESPACE PREFIX = [default] http://schemas.microsoft.com/winfx/2006/xaml/presentation NS = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" /><customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersByLastNameLetterQuery(LetterValue.Text), CustomerLoadedCallback, null);CustomerGrid.ItemsSource = loadOp.Entities;}privatevoidIDButton_Click(objectsender, 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;}voidCustomerLoadedCallback(LoadOperation<customer> loadOperation){IDButton.IsEnabled =true;LetterButton.IsEnabled =true;}}
- 运行解决方案。将会看到如下结果
Powered By D&J (URL:http://www.cnblogs.com/Areas/)


浙公网安备 33010602011771号