在WCF中使用实体框架的步骤

时间:2013-03-11 19:52:44

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

我在WCF中使用Entity Framework有一个问题。我正在使用带有EF DbContext的.NET 4.5。

以下是我在WCF中使用EF所要做的事情。可能是他们不够或有些不是必需的。

  1. 创建EF ADO.NET模型。
  2. 使用DbContext模板生成器将POCO类分隔到单独的项目(ProjectName:Entities)。
  3. 将POCO项目的TT模板指向数据项目中的edmx文件(ProjectName: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中的所有服务中的select方法。当您想要加载时或者当您想要显示限制数据时,这可以提供更好的控制。此外,由于关闭延迟加载,您不会自动获取子/相关。
  10. 插入或更新或删除,服务必须创建上下文并手动设置要修改或添加的对象状态?否则,将不会保存更改。使用DbContext.Attach来附加和设置适当的实体状态添加,修改等。
  11. 我遇到的问题是我找不到使用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

    我很高兴我花的时间真的教育了我!

1 个答案:

答案 0 :(得分:0)

我在这里以及其他论坛上阅读了大量阅读后,我继续使用EF和WCF。

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

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

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

相关问题