我正在处理的应用程序使用Entity Framework 4连接到本地网络上的数据库。我们现在需要将此数据库托管在不同位置的服务器上。显然,我们的客户端应用程序(Windows窗体)仍然需要访问数据。使用VPN将是最简单的,但在这种情况下,这不是一个选项。话虽如此,我的选择是什么?有没有办法可以通过Web服务公开实体数据模型,这需要对客户端应用程序进行最少的返工?
答案 0 :(得分:1)
对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
答案 1 :(得分:1)
总之;请查看WCF服务,但请确保您没有通过您的服务公开IQueryable
或IEnumerable
个实例。
漫长的漫步,可能与啤酒有关:
在不了解应用程序架构的细节的情况下,很难给出具体的答案。
如果您已在现有应用程序内的许多服务类上构建应用程序,则可以通过某种形式的Web服务直接公开这些服务。但是,如果跨越服务边界传递了IQueryable
或IEnumerable
的实例,则必须小心。如果你有,你可能会发现移植到webservices导致非常大的数量或数据通过网络传递,或者你可能会看到N + 1问题,应用程序可能会开始变得非常'健谈'。
替代方案可能是让您的用户可以通过有限的用户直接访问您的数据库。这总是我很紧张的事情,特别是如果这是一个公共应用程序。在这种情况下,您必须确保您提供给他们的sql用户具有您可能可以使用的最少和最少的权限。
您还需要注意,在与数据库通信时,离开本地网络会产生更大的延迟。根据应用程序的编码方式,您可能会在网络往返发生时开始看到UI锁定或挂起。
如果您已经很好地编写了应用程序以便将数据库访问权限分割为服务,那么至少会非常棘手(除非您的应用程序非常简单)。