WPF + WCF + MVC + EF Web /桌面应用程序

时间:2011-11-22 09:50:31

标签: wpf wcf asp.net-mvc-3 entity-framework-4

我正在计划一个具有基于Web的组件和桌面客户端组件的应用程序。基本上我打算使用ASP.NET MVC3&创建基于Web的组件。 Entity Framework作为一个普通的数据驱动网站,但我也计划创建一个扩展网站功能的桌面客户端,这对我来说是一个新的领域,我有点困惑。我知道创建需要访问中央数据库的应用程序的最佳方法是使用WCF,但我之前没有使用过WCF,但听说它很容易与Entity Framework集成。

所以我知道我想要做的事情当然是可能的我只是在寻找关于如何将这个应用程序的单独组件粘合在一起的一些指导,等我应该使用WCF和{{1}先?或者我应该在使用Entity Framework之前完成基于Web的组件?

谢谢, 亚历克斯。

2 个答案:

答案 0 :(得分:6)

有很多方法可以做到这一点,所有这些方式都有不同程度的复杂性。例如,您可以使用Entity Framework构建Web应用程序,在同一Web应用程序中公开OData服务(WCF数据服务),该服务提供WPF应用程序可用于访问数据库的RESTful服务。这非常简单,因为WCF数据服务与Entity Framework非常合作。这基本上是一个两分钟的工作(如果你没有做任何花哨的事)。然后,您的WPF应用程序与Web应用程序具有基本相同的数据库访问类型。在它的默认配置中,WCF数据服务只是公开EF ObjectContext并允许对其进行相同类型的操作。我建议您尝试一下,看看它是否符合您的要求。

但是,这种方法基本上是允许桌面应用程序访问数据库的快捷方式。在大多数情况下,这完全没问题。如果您确实想要付出一些努力,可以建模使用Entity Framework数据源或OData数据源的服务层。从现在开始,这一切都与设计模式有关。这需要付出代价;如果你想做正确的话,分层是很难的事情。鉴于.NET世界稍微改变为“完成工作”,将这些位置放在一起并立即获得正在运行的应用程序是很好的。

您还应该考虑WPF中的MVVM和Web应用程序中的MVC存在根本差异;一个MVC应用程序只是从数据库中提取“快照”,WPF应用程序可能需要更多的努力和异步编程才能感觉自然。

我可以为您提供一些特定任务的指导,例如如何解耦WCF数据服务和实体框架,但根据我的经验,“正确执行”的开销是巨大的。如果您在没有服务层的情况下感到舒适,那么您将拥有使用EF和OData的愉快体验。

答案 1 :(得分:2)

最好先从与wcf集成的Web组件开始,你可以使用实体框架,但如果你有一个数据量很大的数据库我会建议使用T-Sql本身,它为你提供了很多性能选择。 我建议您使用MVP模式构建应用程序模型,因为它可以轻松地从桌面切换到Web应用程序,并且还符合您扩展它的要求。