【问题标题】:Steps to use Entity Framework in WCF在 WCF 中使用实体框架的步骤
【发布时间】:2013-03-11 19:52:43
【问题描述】:

我有一个在 WCF 中使用实体框架的问题。我正在使用 .NET 4.5 和 EF DbContext。

以下是我知道要在 WCF 中使用 EF 时要做的事情。可能它们不够用,或者有些不需要。

  1. 创建 EF ADO.NET 模型。
  2. 使用 DbContext 模板生成器将 POCO 类分离到一个单独的项目 (ProjectName: Entities)。
  3. 将POCO项目的TT模板指向数据项目(ProjectName:Data)中的edmx文件。 "..\Data\MyEdmx.edmx"
  4. 在 POCO 项目的 .TT 文件中添加 [DataContract(IsReference(True))] 和 [DataMemeber] 属性,以便类和属性具有序列化属性。将 Runtime.Serialization 引用添加到项目并将命名空间添加到 .TT 文件。这样可以在保存 .TT 文件时重新创建类或添加新实体时不会丢失您的属性声明。
  5. 添加 ProjectName:对数据项目的实体引用。
  6. 在数据项目的 Context.tt 文件中关闭 ProxyCreation 和 LazyLoading。
  7. 将 (ProjectName: Entities) 和 (ProjectName: Data) 添加到您的 wcf 服务项目中。
  8. 将 EntityFramework 连接字符串复制到您的 WCF 项目。
  9. 如果您希望填充导航对象,则服务中的所有选择方法都必须使用 .Include。当您想要加载或想要显示限制数据时,这可以提供更好的控制。此外,由于延迟加载关闭,您不会自动获取子项/相关项。
  10. 插入或更新或删除,服务必须创建上下文并手动设置要修改或添加的对象状态?否则将不会保存更改。使用 DbContext.Attach 适当地附加和设置实体的状态已添加、已修改等。

我遇到的问题是我找不到一个很好的示例来执行将 EF 与 WCF 结合使用的步骤。我只能看到零碎的东西。可能我是 WCF EF 世界的迟到者,因此找不到。

不确定我是否可以使用代理 WCF。我还没有完全理解代理的优势。

我还阅读了将 DTO 用作 EF 和服务之间的层的建议。这需要一个映射器到位。我不知道我是否需要它。但是这个想法很清楚,它有助于隐藏业务对象中显示的任何不必要的数据库列。例如,我们不会在客户端显示的审核列,例如创建者、更新者等。

我没有选择使用 DataServices,因为我失去了从 WCF 获得的其他绑定选项。我不知道失去 DataServices 考虑未来需要/支持其他绑定机制的客户的需求的简单性是否是一件好事。

感谢任何建议。

其他更新

我确实在 MSDN http://msdn.microsoft.com/en-us/library/ee705457(v=vs.100).aspx 中找到了这个。一些链接指向预发布文档。但这为我使用 EF 和 WCF 提供了更多思路。

这篇文章展示了如何在 WCF 中使用代理,POCO 的更改跟踪。这对我来说是一个好的开始。如果有人有更多建议,请提供您的想法。

更新 2 *N-Tier 的另一个优秀链接*

http://msdn.microsoft.com/en-us/magazine/dd882522.aspx

我很高兴我所花费的时间真的在教育我!

【问题讨论】:

  • @Aron:为什么?他明确写道,他“没有选择使用 DataServices”。我又添加了WCF标签。
  • 我的错。问题是 WCF 作为 SOAP 技术对于 CRUD 来说是错误的“形状”。

标签: wcf entity-framework wcf-data-services


【解决方案1】:

在阅读了这里和其他论坛的大量内容后,我在将 EF 与 WCF 结合使用方面取得了进展。

我按照前面的步骤进行操作。我能够看到使用 DTO 的优势。这确实允许您隐藏不需要向客户端或其他服务公开的字段。但由于时间限制,我暂缓引入 DTO。

我使用了 context.Attach、context.Add 和 context.Entry。

我还做了一个小原型来使用 WCF 数据服务。那是非常快节奏的发展。由于学习其功能的时间限制,我暂时不使用 WCF 数据服务。

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多