我有一个使用ADO.NET实体数据模型访问SQL Server的WCF。
要在包含七列的表中插入一个新行,我正在使用WCF方法。
我认为发送七个参数太多了,所以我可以使用struct或table的实体对象。
你怎么看?你建议我通过WCF公开实体对象吗?或者我需要使用结构来避免这样做。答案 0 :(得分:3)
取决于应用程序的大小/复杂程度。公开实体是可能的,但在传输整个对象图(具有关系的实体)时可能会导致一些序列化问题。这些问题通常通过标记具有DataContract
和DataMember
属性的实体来解决(如果您在EFv4中使用EFv1或默认实体生成,则使用默认情况下使用)。
如果您想要遵循干净的架构和良好的关注点分离,那么建议使用您描述的第二种方法,但它会使您的应用程序更加复杂(另一层对象,转换等)。为数据传输创建的结构或类通常称为DTO(数据传输对象)。
数据传输对象允许您仅传输实体所需的必要数据子集。例如,如果您在实体中具有一些基础结构属性(如CreatedAt,CreatedBy),则您不希望客户端设置这些属性,因为服务的责任是设置它们。因此,不需要允许客户端传递它们。如果不在DTO中公开这些属性,你就会明白这一点。
答案 1 :(得分:1)
我将实体用作数据合同的经验是,您不断遇到各种麻烦。维护DTO并不理想,但为您提供了非常精细的控制,包括能够在不更改合同的情况下更改数据库架构,还可以控制服务所公开的字段。
Automapper可以真正帮助您:http://automapper.codeplex.com/