始终将EF与WCF一起使用,或者我可以直接在客户端使用EF?

时间:2017-01-14 11:28:25

标签: entity-framework wcf

我有一个应用程序将连接到服务器中安装的Sql Server数据库。该应用程序将在许多客户端计算机上运行。

此应用程序有一个存储库,使用EF访问数据库,并具有与数据库数据相关的逻辑业务,检查信息是否正确,添加,删除,修改等。

我想我有两个主要选择。

首先,客户端应用程序,即将在客户端计算机上运行的应用程序,可以使用此存储库,因此应用程序可以直接连接到Sql Server数据库。

第二个选项,让服务器应用程序使用此存储库连接到数据库。客户端将不使用存储库,而是使用WCF连接服务器应用程序以向数据库请求操作和数据。服务器将完成所有工作并通过WCF将结果发送到客户端。

如果我没有错,那么当两个应用程序必须在它们之间进行通信时,WCF是好的,用于在不同应用程序之间通知某些内容或者一起工作以执行某些工作等等。但在我的情况下,它只是用于访问数据库,但客户端可以直接使用存储库。所以我想使用WCF来做它会增加一个新的层,这将有更多的工作,我想这会产生更多的资源。

但是,第一个选项有问题,如果存储库有错误并且会使数据库的信息不正确或不一致,如果我解决了问题,我将不得不更新所有客户端以避免它们错误地更新数据库。但在某些情况下,确保所有客户端更新应用程序以避免此问题将非常困难。至少,我不知道如果检测到应用程序的新版本,强制使用客户端的方法无法运行该应用程序。有没有办法强制进行此更新?

第二个选项解决了这个问题,因为我只是为了更新服务器应用程序并完成所有操作。但是,它使服务器更加工作并需要更多资源。另外,我会在应用程序中添加一个新图层,还有更多工作。

所以我的问题是,在这种应用中,什么是最好的解决方案,第一个,第二个或另一个我不知道的?

如果检测到新的强制更新,是否可以避免客户端应用程序运行?如果可能,第一个选项是一个很好的解决方案,让客户端应用程序直接访问数据库?

非常感谢。

1 个答案:

答案 0 :(得分:0)

从我的观点来看,我会使用 ASP.NET WebApi 2 而不是WCF,因为第一个你将能够通过HTTP(RESTful)创建可以使用的面向资源的服务HTTP的全部功能(如URI,请求/响应标头,缓存,版本控制,各种内容格式)。

这个想法是从客户端应用程序调用WebApi端点。通过这种方式,所有与从数据库中检索信息相关的代码都将在API中定义,并且只能通过API访问。

enter image description here

ASP.NET WebAPi 2入门:https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api