ServiceStack 项目实例 004 建立第一个服务--添加信息

    下面我建立一个服务的Operation,实现添加一条信息的功能,在SOA模式开发中,Operation相当于MVC框架中的一个Action,但是SOA服务中是没有视图层和显示页面的,它对外提供的是数据服务,通常为XML或JSON格式。


    这个功能实现需要在三个文件中分别添加代码:


    1  在SS服务端项目中添加一个类文件Submission.cs , 其中定义Submission类和SubmissionResponse类:

[Route("/Submission", "POST")]
    public class Submission
    {
        [AutoIncrement]
        public int Id { get; set; }
        public DateTime SubmissionTime { get; set; }
        public string Headline { get; set; }
        public string Body { get; set; }
    }
    public class SubmissionResponse
    {
        public int Id { get; set; }
    }


    Submission类是一个实体类,对应数据库中的表,其中[AutoIncrement]是主键字段的标记,SubmissionResponse是出口类,用来返回一个整形值,这个整形值返回新增的记录的ID。


   2  添加一个SubmissionService.cs类,这个类中定义一个服务,用来添加一条新闻。

 public class SubmissionService : Service
    {
        public DataRepository Repo { get; set; }
        public object Any(Submission submission)
        {
            int id = Repo.AddSubmission(submission);
            return new SubmissionResponse() {Id = id};
        }
    }


   DataRepository 是注入的数据库服务类,这个类的定义在DataRepository.cs中(后面将说明这个类),在服务类文件定义中,包含有三个关键的和接口相关的项,

public object Any(Submission submission)

    其中的object是出口类,也就是服务响应用户的请求后,返回给客户端的数据,这个数据是强类型的,可以在客户端自动转换为JSON、JSV、XML等格式。object可以返回任意类型数据,建议写成实际的数据类型,可以提高性能和可读性,这里实际的返回类型是SubmissionResponse,也就是出口类指定的数据类型。

  Any 是允许的HTTP请求类型,支持的类型有GET、POST、PUT和DELETE以及PATCH等,对应的数据库访问功能分别为读取、添加、修改和删除,Any表示支持所有类型操作,如果明确这项操作的类型,要求写成实际的操作类型。

   传入的参数Submission submission是入口类数据,对于新增和修改操作,一般入口类是实体类,对应会操作数据库的一个表。这里通过 Submission 操作数据库中的Submission 表。


    服务和入口出口类的说明图:


    wKioL1SEGayAb4WzAAITLyPbvFw290.jpg

(注:图中的服务和类和代码中的并不是同一个,这里主要是用作结构和用法的说明)


    3   添加DataRepository.cs数据库访问类,在该类中添加一个IDbConnectionFactory 类型的属性,和添加新闻的服务。

        public IDbConnectionFactory DbConnectionFactory { get; set; }
        //public IDbConnectionFactory DbFactory { get; set; }
        public int AddSubmission(Submission request)
        {
            using (var db = DbConnectionFactory.OpenDbConnection())
            {
                db.CreateTable<Submission>();
                db.Insert(request);
                return (int) db.GetLastInsertId();
            }
        }

     


   主要参考资料 :  Getting Started with ASP.NET MVC, ServiceStack and Bootstrap

你可能感兴趣的:(实体类,ServiceStack,服务类,数据操作类)