实体框架中的DTO

时间:2011-05-05 13:21:02

标签: .net entity-framework n-tier-architecture

我计划在EF 4中实现NTier设计。我知道EF本身基于它在数据库中映射的表创建实体。我的问题是,DTO(数据传输对象)的用途是什么,还是真的需要?看起来它会促进冗余,因为您必须为EF生成的每个实体创建另一个DTO实体。请指导我。感谢..

2 个答案:

答案 0 :(得分:9)

DTO是用于在物理层之间仅传输所需数据的数据传输对象(当层位于另一个进程或另一个服务器上时)。如果您只需要公开人的姓名和年龄,则无需转移她的地址,工作,子女等。因此,您将创建仅包含姓名和年龄的简单运输对象。

EF将创建将数据库记录映射到属性的实体。 EF实体还可以使用自定义计算属性和方法扩展(通过部分类)到完整域对象。域对象不应直接暴露给不同的层,这是使用DTO的另一种情况。

编辑:

使用DTO的最后一种情况是跨境呼叫的优化。如果您有分层应用程序,其中一个层在进程边界上调用另一个层上的方法,则应该最小化这些调用,因为它们会降低性能(速度很慢)。为此,您可以创建特殊的DTO,将复杂的数据结构(多个实体)传输到远程层上的某些主操作(外观),这将进一步使用数据执行多个业务操作。

答案 1 :(得分:0)

当您需要传递一部分实体或捆绑在一起的几个实体时,DTO最有用。此外,您的实体实际上与某些实体上下文绑定,因此当您将实体传递到外部时,他们可以在其上执行方法,更改数据等。如果您只想将对象传递到外部,在这种情况下您可以从中受益使用DTO。