ServiceStack项目实ServiceStack 010例。罗斯文- 2

  

,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   null

ServiceStack项目实ServiceStack 010例。罗斯文- 2