国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用ASP.NET Web Api構建基于REST風格的服務實戰系列教程【二】——使用Repository模式構建數據庫訪問層

2019-11-15 02:25:26
字體:
來源:轉載
供稿:網友

使用asp.net Web Api構建基于REST風格的服務實戰系列教程【二】——使用Repository模式構建數據庫訪問層

系列導航地址http://www.survivalescaperooms.com/fzrain/p/3490137.html

前言

在數據訪問層應用Repository模式來隔離對領域對象的細節操作是很有意義的。它位于映射層之上作為對于數據進行CRUD操作的一個抽象層。在Repository模式中,我們可以像操作內存里的集合一樣來操作數據,而Repository則負責把我們的操作更新到數據庫中。

構建Repository

在構建Repository模式之前,我們先列舉在我們項目中將要使用到的用例,由于我們項目的重點是Web Api,所以Repository的構建相對比較簡單,并沒有用泛型基類的方式來構建。

查詢所有的科目,通過ID獲得某個科目。

查詢所有的課程以及關聯的對象(導師和科目) 。

根據ID獲取某個課程以及關聯的對象(導師,學科以及參與該課程的學生)

查詢所有的學生以及相關對象(參與的課程,課程所在學科,導師)

根據課程ID查詢所有報讀的學生信息

通過用戶名查詢學生

通過用戶名和密碼驗證學生信息

為注冊過的學生提供選課功能

學生和課程的CRUD

創建ILearningRepository接口來定義所有的用例:

public interface ILearningRepository    {        IQueryable<Subject> GetAllSubjects();        Subject GetSubject(int subjectId);        IQueryable<Course> GetCoursesBySubject(int subjectId);                IQueryable<Course> GetAllCourses();        Course GetCourse(int courseId);        bool CourseExists(int courseId);        IQueryable<Student> GetAllStudentsWithEnrollments();        IQueryable<Student> GetAllStudentsSummary();        IQueryable<Student> GetEnrolledStudentsInCourse(int courseId);        Student GetStudentEnrollments(string userName);        Student GetStudent(string userName);        Tutor GetTutor(int tutorId);                bool LoginStudent(string userName, string passWord);        bool Insert(Student student);        bool Update(Student originalStudent, Student updatedStudent);        bool DeleteStudent(int id);        int EnrollStudentInCourse(int studentId, int courseId, Enrollment enrollment);        bool Insert(Course course);        bool Update(Course originalCourse, Course updatedCourse);        bool DeleteCourse(int id);        bool SaveAll();    }

上述的接口中已經包含了我們Api中所有需要的操作。特別說明一下在這里對于集合我們都返回IQueryable<>類型,因為這個類型能夠做到按需查詢,延遲加載——當我們進行多條件復合檢索或者分頁,排序的時候,IQueryable<>類型不會立即訪問數據庫,而是在集合被迭代的時候(在前臺foreach展示數據的時候)才去數據庫查詢加載,這樣可以提高訪問性能,避免查詢出一些不必要的數據。

現在我們新建“learningrepository”類實現ILearningRepository,在這里我給出部分實現,剩下的可以在本章最后下載源碼獲得:

public class LearningRepository : ILearningRepository {     PRivate LearningContext _ctx;     public LearningRepository(LearningContext ctx)     {         _ctx = ctx;     }  public IQueryable&lt;Subject&gt; GetAllSubjects()     {         return _ctx.Subjects.AsQueryable();     }  /*Rest of methods implementation goes here....*/  }

在learningrepository的構造函數中我們可以發現我們需求一個learningrepository類型來初始化我們的_ctx。這種設計模式叫做依賴注入,簡單的來說就是對象的創建是通過第三方容器來實現的,而不是直接new。這樣做有利于模塊與模塊間的耦合降低,關于更多依賴注入的信息,請參考:http://www.survivalescaperooms.com/tylerdonet/p/3297915.html

總結

到此為止,我們的數據訪問層就算基本完成了,Web Api的準備工作也就完了。從下一章開始,本次的主角Web Api就要閃亮登場了。

本章源碼:http://yun.baidu.com/s/1o6wf1KQ


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋中市| 靖西县| 绥化市| 化德县| 永昌县| 靖安县| 贡嘎县| 开平市| 平顶山市| 体育| 巴彦县| 屏东县| 永康市| 腾冲县| 康定县| 万载县| 库尔勒市| 堆龙德庆县| 汉川市| 苏州市| 乌兰县| 濮阳县| 周口市| 大同县| 安仁县| 海口市| 卓资县| 长沙市| 尤溪县| 清镇市| 礼泉县| 修文县| 安阳市| 铜梁县| 泸水县| 连云港市| 南投县| 长兴县| 汉川市| 肥城市| 长沙县|