我目前正在开发的一个应用程序使用实体框架 4,它连接到本地网络上的数据库。我们现在需要将此数据库托管在不同位置的服务器上。显然,我们的客户端应用程序(Windows 窗体)仍然需要访问数据。使用 VPN 将是最简单的,但在这种情况下,这不是一个选项。话虽如此,我有什么选择?有没有一种方法可以通过 Web 服务公开实体数据模型,这需要对客户端应用程序进行最少的返工?
2 回答
WCF 数据服务研究:http: //msdn.microsoft.com/en-us/library/cc668794.aspx
并快速阅读此内容,了解为 EF 设置包装服务是多么容易。http://blogs.msdn.com/b/adonet/archive/2011/03/21/using-wcf-data-services-with-entity-framework-4-1-and-code-first.aspx
简而言之; 看看 WCF 服务,但请确保您没有通过您的服务公开IQueryable
或IEnumerable
实例。
冗长的,可能与啤酒有关的版本:
在不了解应用程序架构的细节的情况下,很难给出具体的答案。
如果您已经在现有应用程序内的多个服务类上构建了应用程序,则您可以简单地通过某种形式的 Web 服务直接公开这些服务。IQueryable
但是,如果您已通过服务边界或IEnumerable
跨服务边界传递实例,则必须小心。如果您有,您可能会发现移植到 Web 服务会导致大量数据或数据通过网络传递,或者您可能会看到 N+1 问题并且应用程序可能开始变得非常“健谈”。
一种替代方法可能是让您的用户以有限的用户直接访问您的数据库。这总是让我感到紧张的事情,特别是如果这是一个公共应用程序。在这种情况下,您必须确保您提供给他们的 sql 用户具有您可能逃脱的最少和最少的权限。
您还需要注意,在与数据库通信时,离开本地网络会产生更大的延迟。根据您的应用程序的编码方式,您可能会在网络往返发生时开始看到 UI 锁定或挂起。
如果您已经很好地编写了您的应用程序,开始将您的数据库访问权限拆分为服务,那么至少会很棘手(除非您的应用程序非常简单)。