Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架中的DTO_.net_Entity Framework_N Tier Architecture - Fatal编程技术网

.net 实体框架中的DTO

.net 实体框架中的DTO,.net,entity-framework,n-tier-architecture,.net,Entity Framework,N Tier Architecture,我计划在EF 4中实施一个NTier设计。我知道EF本身根据它在数据库中映射的表创建实体。我的问题是,DTO(数据传输对象)的用途是什么,还是真的需要它?它看起来像是提升了redunduncy,因为您必须为EFs生成的每个实体创建另一个DTO实体。请引导我。感谢..DTO是数据传输对象,用于在物理层之间(当层位于另一个进程或另一台服务器上时)仅传输所需的数据。如果您只需要公开此人的姓名和年龄,则不需要转移她的地址、工作、子女等。因此,您将创建只包含姓名和年龄的简单传输对象 EF将创建将数据库记录

我计划在EF 4中实施一个NTier设计。我知道EF本身根据它在数据库中映射的表创建实体。我的问题是,DTO(数据传输对象)的用途是什么,还是真的需要它?它看起来像是提升了redunduncy,因为您必须为EFs生成的每个实体创建另一个DTO实体。请引导我。感谢..

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

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

编辑:


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

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

您的意思是,在创建分层EF应用程序时,DTO实际上是可选的?因为我不会使用WCF/WS,它只是一个简单的web项目。您可以不使用DTO,但如果您的实体变成了DTO,那么您必须避免向实体添加方法(或使其成为内部方法),最后,它变成了一个过程应用程序模型。所以,n层是不够的,在n层应用模型中有多少层。因为您使用的是EntityFramework,所以DAL和域模型是相同的,如果您不打算使用DTO,那么您的PresentationModel也将是相同的,如果您不打算在UI层中使用视图模型,那么您将拥有一个n层应用程序w/1层对于一个简单的web项目,您最好不使用DTO。在某些情况下,您可能需要DTO,比如JSON,但在这种情况下,您可以使用匿名类型。我计划在我的三层设计中使用EF生成的实体,因为我希望避免创建DTO,这意味着UI可以直接访问DAL(这违反了ntier规则)。这种方法有什么含意吗?层和层是不同的。层是逻辑边界,而层是物理边界。因此,我真正的意思是层,由DLL(BL,DAL)表示的层将部署在同一台计算机上。在这种情况下,只有当您构建完整的域模型(具有业务方法的实体)并且您不想将这些实体公开给上层(UI)时,DTO才会很方便。尝试使用从EDMX自动生成DTO和汇编程序。它节省了大量的编码时间。