2010-10-28 95 views
1

我正在研究一个项目,我们需要从WCF服务中获取数据。服务代码通过实体框架查找数据库。然而,为了防止通过网络将EF生成的类发送到客户端生成的代理中,我们决定将EF类中的值映射到定制的DTO类,其中映射器类负责从EF生成的值中挑选出值并将它们放入DTO类。然后,我们使用这些DTO类来获取服务方法的请求和响应。 EF根据彼此相关的表构建类。我得到不同的类,但看起来像这些如下属性:了解实体框架类

public global::System.Data.Objects.DataClasses.EntityCollection<SubAttachment> Attachments 
    {} 

public global::System.Data.Objects.DataClasses.EntityReference<Gl> GlCodeReference 
    {} 

少数有附加到他们,我猜关键字参考提供了一些方法的属性为EF来查​​找相关的表上领域。

如果我不想发送重EF课程,是否有比这种映射方法更好/不同的方法?如果没有,是否有一些参考资料可以帮助我理解实体框架是如何构建这些类的。

感谢您的时间

回答

1

当您在EF创建类,它们对各自领域的[DataMember]属性,就是这样得到的发送防空火炮的唯一数据电线。因此,它不像看起来那么沉重......

但是,由于您正在通过WCF传递,因此应该生成实体以进行自我跟踪,因此,当他们返回到服务时,您知道发生了什么变化并且不必从db中重新获取每个实体进行比较。

如果你仍然想要DTO的话,你也可以生成它们。如果你使用的是EF4.0,你可以选择提取T4文件(.tt),实际上代码生成 - 使用该文件并进行修改以满足您的需求并生成DTO以及映射程序类别...

要从edmx获取.tt文件(仅适用于EF4):右键单击您的模型,选择添加代码生成项目,然后选择EntityObject生成器,如果要通过wcf传输对象,请选择另一个。这将创建一个tt文件,您可以通过发出保存命令来运行该文件(如果要允许它运行,您将得到一个提示)。保存后,它将生成一个文件,该文件与EntityObject生成器的情况下由edmx模型生成的文件完全相同,或者如果使用其他生成器,则会生成两个.tt文件...