我們用ADO.NET Entity Data Model來生成實體類后,一般都會對這些類進行基本的增刪改查操作,如果每個類都要寫這些基本的方法,實在太乏味了。下面就是通過step by step的方式介紹如何用DBContext來實現通用增刪改查的REST方法,以及實現過程中容易出現的問題。
1. 打開vs2012,新建一個class library的項目
2. 新加一個ADO.NET Entity Data Model項到這個項目
3. 打開App.Config, 修改res://* 為res://yourproject
否則會報下面的這咱錯誤:
WIFI.ssdl(3,4) : error 0019: Each type name in a schema must be unique. Type name 'WifiModel.Store.AD' was already defined.
4. Build這個項目
5. 新建另一個web api的項目
ASP.NET MVC 4 Web Application –> Web API 模板
注意這個項目的EF的版本與上個項目的版本要一致
6. 添加一個類到Models下:
public class GenericDBContext<T> : WifiEntities where T : class { public DbSet<T> Items { get; set; } public List<T> Get() { return Set<T>().ToList(); } public T Get(int id) { return Items.Find(id); } public void Put(T item) { Items.Attach(item); Entry(item).State = EntityState.Modified; SaveChanges(); } public void Post(T item) { Items.Add(item); SaveChanges(); } public void Delete(int id) { Delete(Get(id)); } public void Delete(T item) { Items.Attach(item); Entry(item).State = EntityState.Deleted; SaveChanges(); } }
7. 添加一個到Controllers下面:
public class GenericController<T> : ApiController where T : class { private readonly GenericDBContext<T> _context = new GenericDBContext<T>(); public List<T> Get() { return _context.Get(); } public T Get(int id) { return _context.Get(id); } public void Post([FromBody]T t) { _context.Post(t); } public void Put([FromBody]T t) { _context.Put(t); } public void Delete(int id) { _context.Delete(id); } }
至此,通用方法寫完了
8. 下面就可以寫具體Controller了
public class ADController : GenericController<AD>
{
}
…