实体框架和DTO

dot*_*inc 11 c# dto

我打算使用EF(POCO)生成的实体向客户端发送数据而不是创建DTO?这是一个好习惯吗?基本上,我的EDMX文件在我的DAL层上.因此,用户界面将直接访问我的DAL.谢谢.

Mar*_*ell 13

这取决于客户端与对象域的接近程度.如果它是您的客户端,那么可能 - 实际上这几乎是ADO.NET数据服务(等)如何工作 - 直接暴露您的模型.

但是,如果客户是其他任何我建议专用的DTO.事实上,无论如何我都会建议它;否则,它会变得有些复杂:

  • 控制序列化细节(什么成员?什么名字?当我们发布它时会发生什么?)
  • 处理关系属性(它一个Orders成员......但是是懒惰加载的吗?我们想要吗?)
  • 将传入对象(用于更新等)合并回模型
  • 在反序列化期间,抑制您在setter等中添加的任何逻辑
  • 如果在基于树的序列化程序中获得同一对象的2个单独副本,则处理身份管理 DataContractSerializer

在大多数情况下,拥有一个单独的DTO会使大部分问题消失


dho*_*gen 12

基本上,我不认为将DAL对象发送到您的界面是个好主意,所以我会使用DTO.为了最大限度地减少这样做,我将看一下DTO生成器,生成DTO代码,它允许您从DAL对象转换为DTO,反之亦然.

编辑:对不起,没看到你正在使用POCO.看看这篇SO帖子