用DBContext (EF) 實現通用增刪改查的REST方法


我們用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>
    {
      
    }

 

9. 最后用soap ui 進行調試,通過


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM