如何使用通用web api 2控制器来使用包含EF实体的现有项目?

时间:2013-12-16 13:37:20

标签: c# asp.net-web-api entity-framework-6

在Visual Studio 2012中,我想创建一个包含这些项目的解决方案

  • 项目Dal包含实体(大多数DTOs包含一些复杂对象)和实体框架引用以将实体持久保存到数据库中
  • 项目WebApi应包含针对Dal
  • 触发CRUD的网络服务
  • 项目RichClient是一个Windows窗体客户端,用于使用WebApi-Project显示和编辑一些数据
  • 项目WebClient是一个MVC5 Asp.Net页面,用于查看和编辑数据

以下代码是伪代码。我们的想法是使用现有的实体框架项目来处理与数据库的对话。

public class EntityController<T> where T : ApiController 
{    
    // GET api/entity
    public IEnumerable<string> Get(){
        return Dal.GetEntitiesAsIEnumerable<T>();
    }

    // GET api/entity/5
    public string Get(int id){
        return Dal.GetEntity<T>(5);
    }

    // POST api/entity
    public int Post([FromBody]string value){
        var entity = GetEntityFromPost<T>();
        return Dal.Save<T>(entity);
    }

    // PUT api/entity/5
    public void Put(int id, [FromBody]string value){
        var entity = GetEntityFromPut<T>();
        return Dal.Save<T>(entity);
    }

    // DELETE api/entity/5
    public void Delete(int id){
        var entity = GetEntityFromDelete<T>();
        return Dal.Delete<T>(entity.Id);
    }
}

我的问题是

  • 如何构建Web API 2.0控制器以使用现有的DAL-Project?
  • 我可以使用上面的a generic type constraint使用通用控制器吗?

1 个答案:

答案 0 :(得分:1)

  1. 就像将DAL程序集引用添加到WebApi项目然后像往常一样使用using语句调用DAL一样简单。
  2. 你可以像你的例子一样使用泛型。但你为什么要这样?这是不必要的复杂和滥用语言功能。为什么不直接使用MVC框架而只是继承ApiController?像这样:
  3. public class EntityController : ApiController

相关问题