场景:来自数据模型的实体将传递到具有各种信息的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]。
这是正确的方法吗?
答案 0 :(得分: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;