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; }
}
}
View Code 1.2、DbHelper.cs数据库上下文
该文件主要定义数据库的上下文,我对EF用的海曙不够熟练,最近也一直在看,推荐一个人的博客,是一个EF学习的系列,讲的还不错。http://www.iyunv.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(new MigrateDatabaseToLatestVersion());
}
public DbSet Students { get; set; }
}
internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration
{
public ReportingDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
AutomaticMigrationDataLossAllowed = true;
}
}
}
View Code
1.3、ValuesController.cs数据操作控制器
在控制器中我们定义了增删改查的基本方法,及Redis的操作,该控制器中只有Get()方法判断了session是否为空,这里只是为了验证一下session的值是否传递过来了。本知识点参照文章:http://www.iyunv.com/newton/p/3238082.html
看代码之前下介绍一下Redis的一个操作。1、Redise.AddEntityToList("stuList", stu);我们定义了一个缓存键位stuList的缓存列表,该缓存列表存储的是Students实体,而不是把List stu存进去。2、Redise.AddEntityToList("stuList", stu);将单个stu对象存进缓存链表中。3、Redise.GetList("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("stuList");
if (stuList == null || stuList.Count()==0)
{
using (DbHelper db = new DbHelper())
{
stuList = db.Students.ToList();
//创建stuList缓存链表
Redise.AddList("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("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("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("stuList").Where(it => it.Num == stu.Num).FirstOrDefault();
Redise.RemoveEntityFromList("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:[{},{},{}]}