通过EF上下文与Web API查询数据库之间的区别

时间:2014-10-13 19:31:40

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

我目前有一个WinForms应用程序,它使用Entity Framework与本地网络上的SQL数据库进行通信。这很好,因为我可以创建一个数据库上下文,然后使用LINQ来操作我的数据。

我正在构建一个MVC应用程序,该应用程序将托管在不同的位置,但需要访问WinForms应用程序使用的相同数据库。我希望我可以通过Web API公开数据,但是当我开始这样做时,看起来我必须构造URL以从API返回我需要的数据,而不是通过上下文进行通信像我习惯做的那样。

例如,如果我想获取用户当前所有的角色,我可以这样做:

var roles = from u in ctx.user where u.Id == 1 select u.Roles;

如果我理解正确,如果使用Web API我必须使用我的所有参数构造一个URL,使用HttpContext创建一个HTTP请求,然后从响应中获取我的结果。它是否正确?

3 个答案:

答案 0 :(得分:0)

Web API只是创建Web服务的简便方法。您不一定需要在URL中包含参数,您可以使用HTTP帖子并在请求正文中包含参数,但您不能在Web方法上运行LINQ查询就像你使用Entity Framework一样。

答案 1 :(得分:0)

你大多是正确的。使用Web API在此处添加了一个附加层。不错的是,您可以将大量逻辑从应用程序转移到API层,并拥有更清晰的分离关注点。这意味着您可以添加与同一Web API通信的其他客户端(可能不支持EF,甚至可能不支持基于.NET的应用程序)。

请注意,它不一定必须是包含参数的URL,它们可以位于请求正文中。并且there are frameworks可以在您提供强类型参数时自动为您创建请求。你没有使用HttpContext(无论如何它都是服务器端的ASP.NET东西,而不是客户端。)

答案 2 :(得分:0)

我建议提取出“数据层”。如果所有EF调用都是在新提取的数据层中完成的,那么您可以对两个项目使用相同的调用。创建一个新项目并从该层执行所有调用。见Repository Pattern.

现在提取该图层,您可以执行任何操作。您可以使用Web api调用Repository层中的各个方法,也可以使用内置的MVC ActionResults来处理此问题。

附注:您可能需要查看Dependency Injection.它会使流程更轻松,更顺畅。