這幾天生病了,也沒有心情寫博客,北京醫院真心傷不起呀,錢很多花,病沒治好,還增長了新病,哎不說了,週末還得去大醫院檢查一下,趁女盆友尚未回來,把前幾天寫的東西總結一下。本文也會接觸一點webApi的東東,本身最近也一直在看,算是入門了吧。本文用到的知識點有MVC四、knockout.js、EntityFramework、WebApi、Redis緩存及基於Redis緩存的Session共享,都是很基礎的操做,MVC我會介紹過濾器及錯誤捕捉,EntityFramework增刪改數據,WebApi作爲數據通訊以及Redis的基本緩存操做等。html
若是你對這些知識還不太熟悉,請打開鏈接閱讀前幾篇文章。http://www.cnblogs.com/lc-chenlong/web
本文參考:數據庫
http://www.cnblogs.com/artech/archive/2012/05/14/web-api-demo.html(蔣金楠)json
http://www.cnblogs.com/rohelm/p/3195750.html(webAPI入門講解)api
本文主要實現如下功能:緩存
經過一個學生信息的管理來實現該項目。本人對webApi也是入門級別,若是過得不對的歡迎指正,也歡迎分享學習資料。session
一、咱們先介紹一下WebApi項目,項目結構以下圖ide
1.一、Students.cs實體類學習
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; namespace MvcWebApi.Models { [Table("tb_Students", Schema = "dbo")]//關聯數據表 dbo.tb_Students public class Students { [Key] public string Num { get; set; } [MaxLength(10),Required(ErrorMessage="姓名不能爲空")] [Column(TypeName = "nvarchar")] public string Name { get; set; } public int Age { get; set; } [MaxLength(10)] [Column(TypeName = "varchar")] public string Sex { get; set; } [MaxLength(50)] public string Class { get; set; } } }
1.二、DbHelper.cs數據庫上下文ui
該文件主要定義數據庫的上下文,我對EF用的海曙不夠熟練,最近也一直在看,推薦一我的的博客,是一個EF學習的系列,講的還不錯。http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.Data.Entity.Migrations; namespace MvcWebApi.Models { public class DbHelper : DbContext { public DbHelper() : base("strConn") { //自動建立表,若是Entity有改到就更新到表結構 Database.SetInitializer<DbHelper>(new MigrateDatabaseToLatestVersion<DbHelper, ReportingDbMigrationsConfiguration>()); } public DbSet<Students> Students { get; set; } } internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<DbHelper> { public ReportingDbMigrationsConfiguration() { AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB AutomaticMigrationDataLossAllowed = true; } } }
1.三、ValuesController.cs數據操做控制器
在控制器中咱們定義了增刪改查的基本方法,及Redis的操做,該控制器中只有Get()方法判斷了session是否爲空,這裏只是爲了驗證一下session的值是否傳遞過來了。本知識點參照文章:http://www.cnblogs.com/newton/p/3238082.html
看代碼以前下介紹一下Redis的一個操做。一、Redise.AddEntityToList<Students>("stuList", stu);咱們定義了一個緩存鍵位stuList的緩存列表,該緩存列表存儲的是Students實體,而不是把List<Students> stu存進去。二、Redise.AddEntityToList<Students>("stuList", stu);將單個stu對象存進緩存鏈表中。三、Redise.GetList<Students>("stuList")從緩存中獲取列表。
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using MvcWebApi.Models; using Common; using System.Data; namespace MvcWebApi.Controllers { public class ValuesController : ApiController { SessionHelper session = new SessionHelper(); RedisHelper Redise = new RedisHelper(); // GET api/values public HttpResponseMessage Get() { //判斷session的值是否傳遞過來 if (session["user"] == null) { return Request.CreateResponse(HttpStatusCode.OK, new { type="error",data="session爲空,清先登錄"}); }
//從stuList緩存鏈表獲取數據 var stuList = Redise.GetList<Students>("stuList"); if (stuList == null || stuList.Count()==0) { using (DbHelper db = new DbHelper()) { stuList = db.Students.ToList(); //建立stuList緩存鏈表 Redise.AddList<Students>("stuList", stuList); } } var data = new { type = "success", data = stuList }; return Request.CreateResponse(HttpStatusCode.OK, data); //db.Students.ToList(); } // GET api/values/5 public Students Get(string id) { Students stu = Redise.GetList<Students>("stuList").Where(it => it.Num == id).FirstOrDefault(); if (stu == null) { using (DbHelper db = new DbHelper()) { stu=db.Students.Where(it => it.Num == id).FirstOrDefault(); if (stu != null) { //向stuList緩存鏈表中添加實體 Redise.AddEntityToList<Students>("stuList", stu); } } } return stu; } // POST api/values public void Post([FromBody] Students stu) { } // PUT api/values/5 public HttpResponseMessage Put([FromBody] Students stu) { Students RedStu = Redise.GetList<Students>("stuList").Where(it => it.Num == stu.Num).FirstOrDefault(); Redise.RemoveEntityFromList<Students>("stuList", RedStu); Redise.AddEntityToList("stuList", stu); using (DbHelper db = new DbHelper()) { db.Entry(stu).State = EntityState.Modified; db.SaveChanges(); } return Request.CreateResponse(HttpStatusCode.OK, new { type = "success" }); } // DELETE api/values/5 public void Delete(int id) { } } }
介紹一下下面代碼返回的json數據格式
var data = new { type = "success", data = stuList }; return Request.CreateResponse(HttpStatusCode.OK, data);
數據格式爲:
{"type":"success",data:[{},{},{}]}
今天就寫到這裏吧。明天繼續寫MVC調用WebAPi。源代碼下一篇寫完奉上。
天天學習一點點,天天進步一點點