【问题标题】:Prism + Modules use WCF as dataaccess layerPrism + Modules 使用 WCF 作为数据访问层
【发布时间】:2012-04-11 08:03:58
【问题描述】:

我正在编写一个使用 prism 框架的应用程序 (WPF)。我有一个使用 shellview 的客户。 我有一些模块。所以这是不同的项目。每个模块都是一个单独的项目。 这些模块由 Unity 加载。

我有以下

Solution
 Client
    Modules
    Client ( app )

 Common
    Entities

 Server
    Data
    Web

所以你可以看到我在服务器文件夹下有一个数据项目。在那里你可以找到 edmx。 Web 项目是空的,Entities 项目也是空的。

客户端(应用程序)有一个带有引导程序的 shellview。 客户端工作。只有数据访问层必须集成。

进行数据访问的最佳解决方案是什么? WCF,还有别的吗? 我们需要为实体使用什么模板。我们如何在所有代码(View/ViewModel)所在的模块中使用服务?

Pff,我正在寻找和阅读这么多。 在stackoverflow上找到了一些主题。但没有一个话题是从头开始的。 希望有人可以帮助我。

【问题讨论】:

  • 您使用哪种数据访问方法与您选择使用 prism/unity 几乎是正交的。您选择的方法将更多地取决于其他因素,例如您的数据库的外观、您是否控制数据存储、您的可扩展性需求是什么、是否要使用 ORM 等。
  • 您应该尝试更好地集中您的问题。你问了几个问题(什么数据访问方法?我可以直接从我的 viewModel 使用我的 DAL 吗?等等)如果你希望人们理解你的上下文,你可能应该单独问这些问题并彻底解释每个问题问题并提供好的建议。否则,您似乎只是在说“我设计了这个项目的一部分,但被卡住了......互联网领域的其他人可以为我做剩下的事情吗?”
  • 我的数据库是使用实体框架构建的。从我构建的 edmx 生成代码。可扩展性 -> 它只会在我的本地网络中使用。我已经使用了 WCF 服务,但没有使用 edmx 功能/模块棱镜。总是直接从服务到客户,合同是我自己写的。现在它应该使用 edmx 实体。我不希望有人做剩下的事情。我希望只有有人可以帮助我,正确开始。

标签: c# wpf wcf prism


【解决方案1】:

我建议您在 .edmx 上生成 POCO 或 STE,并使用存储库模式进行数据库访问。创建一个单独的 WCF 服务项目并调用这些存储库。

您的 Prism 解决方案将有一个带有静态类的代理项目来返回服务对象,并且您的客户端 (Prism) 应用程序将调用 WCF 服务。

【讨论】:

  • 您是否有一个带有示例的站点。我还发现一些信息表明 POCO 是不行的。现在你应该使用 DbContext??
  • 问题不在于如何使用 WCF .... 。但是更多带有棱镜的 WCF 和 WPF,而不是 Silverlight。
  • 是的,在单独的项目(在客户端解决方案中)创建客户端代理或在 Client.Common 项目中创建代理。
  • 在客户端项目(应用程序本身)下还是另一个项目下?然后与该代理建立连接?
【解决方案2】:

您可以查看 Calcium SDK (http://calcium.codeplex.com/),它利用 Prism 模块化应用程序开发以及对 WCF 服务的支持。

【讨论】:

  • 我认为它对于我需要的东西来说有点大。 WCF 不需要它。它也可能与其他一些技术一起使用。 :)
【解决方案3】:

如果您熟悉服务器端的 WCF 和 EntityFramework,那么这是要走的路。

为了重用服务中生成的代理类,您可以将服务引用保存在您从所有模块引用的公共程序集中。像“基础设施”这样的东西是一个很好的命名约定。

如果您的某个模块需要独特的功能,那么您将服务引用放在该项目上。

在 WPF 客户端的情况下:首先使用实体​​框架代码并将模型类分离到单独的程序集中,以便您可以在主客户端和模块中重用它们。

如果是 silveright 客户端: 如果生成服务代理时重复的模型类和命名空间对您来说是个问题,您可以检查 WCF RIA 服务。请始终记住,您可以使用 Visual Studio 项目文件属性中的 RIA Link 链接两个程序集,一个是 silverlight,一个是 .net。然后您选择的任何服务器端代码文件都可以在客户端上重用。无论您是否使用 WCF 服务,都可以在文件名中使用“共享”后缀(例如:enums.shared.cs)。你可以了解更多herehere

希望这会有所帮助。

【讨论】:

  • 我不会在我的项目中使用 Silverlight。 :(
  • 抱歉 Silverlight 部分。我得意忘形了 :) 刚刚更新了我的答案以更好地涵盖 WPF 部分。
  • 这不是问题。我已经创建了一些 Common.Model 。我在哪里添加了我的实体。我的服务也正在运行。唯一的问题是在我的客户端应用程序中使用该服务。那使用棱镜。所以我有不同的模块。
  • 我不明白您在哪里需要帮助。通过阅读上述所有 cmets 和答案,我认为您拥有所需的一切。正如我在回答中所说,我同意@Jeetendra.Sharma 的观点,即您必须将生成的服务代理放在一个单独的项目中,而不是放在应用程序本身上。然后从模块项目中引用。
猜你喜欢
  • 2011-03-14
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多