【问题标题】:How to mix Entity Framework with Web API如何将实体框架与 Web API 混合使用
【发布时间】:2012-03-05 21:02:59
【问题描述】:

我正在研究新的 ASP.NET MVC4 Web API 框架。我在 Windows 8 消费者预览版上运行 Visual Studio 2011 beta。

我的问题是新 Web API 框架的官方示例都没有使用任何类型的数据库后端。过去,我已经能够创建一个本地 SQL CE 数据库,并通过使用实体框架作为 ORM 的 WCF 数据服务来提供它。我如何对 Web API 做同样的事情?

另外,这甚至是一个有效的问题吗?如果我想公开实体框架映射的 SQL CE 数据库,是否应该继续使用 WCF 数据服务?它似乎工作正常,除了不提供选择我可能通过 web api 获得的响应格式化程序的灵活性。

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework asp.net-web-api


    【解决方案1】:

    如果你查看官方的Contact Manager sample,你会发现Repository Pattern 是用来访问数据层的。 另外,请记住,在这个特定示例中,还有通过 Ninject 进行的 DI。

    在我的例子中,我很容易将它插入到现有的 EF 模型中。

    这是一个存储库实现的示例

    ///MODEL
    public class SampleRepository : ISampleRepository
    {
    
        public IQueryable<Users> GetAll()
        {
            SampleContext db = new SampleContext();
            return db.users;
        }
    
        [...]
    }
    
    ///CONTROLLER
    private readonly ISampleRepository repository;
    
    public SampleController(ISampleRepository repository)
    {
        this.repository = repository;
    }
    
    //GET /data
    public class SampleController : ApiController
    {
        public IEnumerable<DataDTO> Get()
        {
            var result = repository.GetAll();
    
            if (result.Count > 0)
            {
                return result;
            }
    
    
            var response = new HttpResponseMessage(HttpStatusCode.NotFound);
            response.Content = new StringContent("Unable to find any result to match your query");
            throw new HttpResponseException(response);
        }
    }
    

    不过,您的里程可能会有所不同,您可能希望进一步抽象出其中的一些数据访问。 好消息是,您可能已经在基于 MVC 的项目中使用了很多模式和想法are still valid

    【讨论】:

    • 不错,但在这种情况下我不会费心创建存储库。实体框架,尤其是较新的版本,已经在使用存储库模式。除了增加复杂性之外,包装器没有做任何不同的事情。
    • 我的设置与您上面的代码几乎相同 - 我通过普通的 MVC 应用程序添加新记录,然后尝试使用相同的存储库通过 web api 检索它们。但是,web api 不会返回新添加的记录,只会返回我最初在主应用程序中使用 Seed 方法添加的记录。知道这是为什么,或者我如何让 Web api 返回新添加的记录?
    • Ciaran,听起来您可能有指向不同资源的连接字符串,即 SQL compact 与 SQL 服务器。或者您可能会在每次执行时完全重新创建数据库。但我在这里没有太多工作要做。您的查询可能需要一个单独的示例来提出一个全新的问题。
    • 我引用了与主应用程序相同的存储库...在我的 web api 应用程序中根本没有数据库连接信息。我也尝试过直接在主应用程序中引用 DbContext 层,但仍然没有乐趣。如果您有兴趣,我在这里有一个单独的问题:stackoverflow.com/questions/11024885/…
    • 好吧,从头开始 - 我以为我已经从 web api 中删除了数据库连接信息,但我没有这么感谢你的提示 :)
    【解决方案2】:

    我没有使用过 WCF Web API,所以我可以肯定地说你是否可以像使用 WCF Web API 一样使用它,但我确信你可以将 EF 与 ASP.NET Web API 一起使用。我建议你看看ASP.NET MVC makes use of EF 是如何使用它的,它应该非常类似于你将它与 ASP.NET Web API 一起使用的方式。

    至于其他问题,如果你正在计划一些新的开发,你应该考虑使用 ASP.NET Web API,因为wcf.codeplex.com 上有一个公告说:

    WCF Web API 现在是 ASP.NET Web API! ASP.NET Web API 随发布 ASP.NET MVC 4 测试版。 jQuery 内容的 WCF Web API 和 WCF 支持 此网站上的内容将于 2012 年底删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多