,ServiceStack才能。罗斯文这个项目中提供了三表关联操作和缓存方式操作数据的示例。
,,<强>主要的服务文件强>,
,,CustomersService。cs:查询客户列表
,OrdersService才能。cs:查询一组订单以及和该组订单相关的订单项,其中每个订单包含客户信息和具体商品详情,共涉及到三个表。
,CustomerDetailsService才能。cs一个客户及其订单,被前一个服务(OrdersService)调用。
,CachedServices才能。cs使用缓存方式,对上面三个服务进行封装,缓存使用的MemoryCacheClient。
,,ServiceStack的缓存支持多种形式存储,包括内存,复述,MemoryCached, SQLAlchemy等,但是仅用于缓存自身的服务,并不是通用功能的缓存,所以使用范围很有限。
,CustomersService才能。cs的代码,获取所有用户的列表,这个功能很简单,不加说明了。
,,,,,,,, public CustomersResponse (Customers 请求) ,,,,,,,{ ,,,,,,,,,,,var customers =, Db.Select(); ,,,,,,,,,,,return new CustomersResponse {=,, Customers  Customers }; ,,,,,,,}
,,OrdersService。cs的代码,用来获取多组订单信息,注意是多组,使用了。net集合处理的一些功能。这个服务先获取一组或一个订单,再根据订单获取订单详情信息,获取订单详情的时候根据订单ID对订单详情数据进行分组。
public class OrdersService : ServiceStack.ServiceInterface.Service ,,,{ ,,,,,,,//指定分页式每页几条记录 ,,,,,,,private const int PageCount =, 8; ,,,,,,, ,,,,,,,public object (Orders 请求) ,,,,,,,{ ,,,,,,,,,,,//获取一组或一个订单 ,,,,,,,,,,,var orders =, request.CustomerId.IsNullOrEmpty () ,,,,,,,,,,,,,,,?,Db.Select(order =祝辞,order.OrderByDescending (o =祝辞,o.OrderDate)) ,,,,,,,,,,,,,,,,,,,,,.Skip ((request.Page.GetValueOrDefault(1),在地上;1)* PageCount) ,,,,,,,,,,,,,,,,,,,,,,(PageCount) ,,,,,,,,,,,,,,,,,,,,,.ToList () ,,,,,,,,,,,,,,,,,Db.Select (order =祝辞,order.Where (o =祝辞,o.CustomerId ==, request.CustomerId) .OrderByDescending (o =祝辞,o.CustomerId)); ,,,,,,,,,,,if (orders.Count ==, 0) ,,,,,,,,,,,,,,,return new OrdersResponse (); ,,,,,,,,,,,,,,, ,,,,,,,,,,,//根据订单获取订单详情信息,并据订单ID对订单详情数据进行分组 ,,,,,,,,,,,var orderDetails =, Db.Select (detail =祝辞,Sql.In (detail.OrderId, orders.ConvertAll (x =祝辞,x.Id))); ,,,,,,,,,,,var orderDetailsLookup =, orderDetails.ToLookup (o =祝辞,o.OrderId); ,,,,,,,,,,,var customerOrders =, orders.ConvertAll (o =祝辞,new CustomerOrder { ,,,,,,,,,,,,,,,Order =,啊, ,,,,,,,,,,,,,,,OrderDetails =, orderDetailsLookup [o.Id] .ToList () ,,,,,,,,,,,}); ,,,,,,,,,,,return new OrdersResponse {=,, Results  customerOrders }; ,,,,,,,} ,,,}
,,,,
,,<>强分步说明:1订单列表强>
,,获取订单信息,判断传入的,CustomerId是否为空,如果CustomerId为空,执行分页方式查询订单的列表,分页的语法和EF中是相同的;如果有CustomerId,就会执行获取一条订单的操作。
var orders =, request.CustomerId.IsNullOrEmpty () null null null null null null null nullServiceStack项目实ServiceStack 010例。罗斯文- 2