0

场景:来自数据模型的实体被传递到带有各种信息的 WCF Web 服务中,保存到数据库中,然后返回完全填充有附加信息的对象。

   public class Request
   {
    public virtual Guid RequestID { get; set; }
    public virtual string RequestType { get; set; }
    public virtual System.DateTime CreatedDate { get; set; }
    //More properties here populated from DB
   }

   [OperationContract]
   Request CreateRequest(Request input);

在此示例中,仅当记录插入数据库时​​才会填充 RequestID 和 CreatedDate,因此在初始请求期间不应显示。但是,当返回对象时,它们应该是可见的。

我们目前采用的方法是在我们的 Web 服务实现项目中创建两个类(RequestInput、RequestOutput),它们继承自实体。然后,我们将在需要的各种属性上添加 [DataMember] 属性,在应该忽略的属性上添加 [IgnoreDataMember]。

这是正确的方法吗?

4

1 回答 1

1

我不会说这是正确或不正确的方式。但更通常的做法是使用类似以下的名称

[DataContract]
Request{...}

[DataContract]
Response{...}

理想情况下,请求和响应应该与您在客户端和服务器中使用的模型表示分离 - 即您有一个外观或适配器,可以将它们从您的服务代码映射到您的模型。

这与我将如何做 - 但这非常主观地取决于实体的大小等 - 您可能希望以某种方式涉及自动映射器。

// higher level code
var entity = new Entity { properties we know before call };
// pass down to service layer 
var response = service.CreateRequest(new Request { Prop1 = entity.Prop1... } );
entity.RequestID = response.RequestId;
entity.CreatedDate = response.CreatedDate;
于 2012-02-22T13:16:03.703 回答