ServiceStack 项目实例 008 ServiceStack.Examples - 2
先回归下SS的运行环境
我们接续前文,说明一下ServiceStack.Examples中的实用经典的代码(下面的代码是更新成新版写法后的):
publicobjectAny(GetUsersrequest){using(vardbConn=ConnectionFactory.OpenDbConnection()){varusers=newList<User>();if(request.UserIds!=null&&request.UserIds.Count>0){users.AddRange(dbConn.GetByIds<User>(request.UserIds));}if(request.UserNames!=null&&request.UserNames.Count>0){users.AddRange(dbConn.Select<User>("UserNameIN({0})",request.UserNames.SqlInValues()));}returnnewGetUsersResponse{data=users};}
这段服务实现的功能是通过一组ID或者一组用户名为条件,搜索出一个用户列表。我们先看入口类的参数参数定义:
publicclassGetUsers{publicList<long>UserIds{get;set;}publicList<string>UserNames{get;set;}}
入口类参数定义了两个列表,
UserIds
为用户ID的一组列表 ,通过
dbConn.GetByIds<User>(request.UserIds)
查询到符合这组ID的用户列表, 再调用
users.AddRange
加入到出口类中的data属性上
UserNames
为用户名字的一组列表,通过
dbConn.Select<User>("UserNameIN({0})",request.UserNames.SqlInValues())
查询到一组包含有这组用户名的用户(是通过SQL的IN操作),再调用
users.AddRange
加入到出口类的data属性上
出口类的定义:
publicclassGetUsersResponse{publicGetUsersResponse(){this.data=newList<User>();this.ResponseStatus=newResponseStatus();}publicList<User>data{get;set;}publicResponseStatusResponseStatus{get;set;}}
出口类是有一个User实体类集合,加上一个操作相应状态类组成,原有出口类中用户列表使用的是Users属性(
this.Users=ArrayOfUser{get;set;}
),根据对接到extjs的要求,这个列表的属性要求名字为data,这里改为data,ArrayOfUser是一个用在旧版中的自定义的集合类,我们只需要使用List<User>即可,不需要定义这个集合
以下是User实体类:
publicclassUser{[AutoIncrement]publicintId{get;set;}publicstringUserName{get;set;}publicstringEmail{get;set;}publicstringPassword{get;set;}publicGuidGlobalId{get;set;}}
ResponseStatus 是SS系统内置的HTTP相应状态类,其中封装了HTTP错误返回代码,错误消息以及错误堆栈等,而且提供了三种形式的覆写构造方式。
//Summary://CommonResponseStatusclassthatshouldbepresentonallresponseDTO's[DataContract]publicclassResponseStatus{//Summary://InitializesanewinstanceoftheServiceStack.ServiceInterface.ServiceModel.ResponseStatus//class.Aresponsestatuswithoutanerrorcode==successpublicResponseStatus();////Summary://InitializesanewinstanceoftheServiceStack.ServiceInterface.ServiceModel.ResponseStatus//class.Aresponsestatuswithanerrorcode==failurepublicResponseStatus(stringerrorCode);////Summary://InitializesanewinstanceoftheServiceStack.ServiceInterface.ServiceModel.ResponseStatus//class.Aresponsestatuswithanerrorcode==failurepublicResponseStatus(stringerrorCode,stringmessage);//Summary://HoldsthecustomErrorCodeenumifprovidedinValidationExceptionotherwise//willholdthenameoftheExceptiontype,e.g.typeof(Exception).NameAvalue//ofnon-nullmeanstheserviceencounteredanerrorwhileprocessingtherequest.[DataMember(Order=1)]publicstringErrorCode{get;set;}////Summary://Formultipledetailedvalidationerrors.Canholdaspecificerrormessage//foreachnamedfield.[DataMember(Order=4)]publicList<ResponseError>Errors{get;set;}////Summary://Ahumanfriendlyerrormessage[DataMember(Order=2)]publicstringMessage{get;set;}//[DataMember(Order=3)]publicstringStackTrace{get;set;}}
更新了使用新版ServiceStack后的项目代码
http://down.51cto.com/data/1964107
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。