2016-07-05 10 views
3

現在、WCFサービスに使用するエンティティがあります。Web ApiとWCFの同じエンティティ

[DataContract] 
    public class Student 
    { 
     [DataMember] 
     public long Id { get; set; } 

     [DataMember] 
     public string Name { get; set; } 

     [DataMember] 
     public DateTime Dob { get; set; } 
    } 

よう

サンプルは、だから、すべてのプロパティは、現時点ではWCFにさらされています。 wep apiサービスに同じクラスを使用したいが、すべてのフィールドを公開しない。

デフォルトのXMLシリアライザを無視するために[IgnoreDataMember]を使用する必要があることは知っていますが、現在のwcfサービスに影響を与えます。

この

+3

現在のエンティティを変更することが他のテクノロジに影響する場合は、別のエンティティを作成する必要があります。 – Nkosi

+1

また、両方のクラスを同じ「フィールド」で保持したい場合は、インターフェイスを作成してそれらを「リンク」することができます – OrcusZ

答えて

0

を処理するためのより良い方法は、あなたが応答オブジェクトを形成するために必要なすべての機能が含まれていて、クライアントに返されたオブジェクトグラフを制御する単純なヘルパークラスを構築することができますあります。クライアントに返されるレスポンスを整形して制御するのに役立つファクトリパターンを使用すると、DataBaseにあるドメインオブジェクトモデルの一部のモデルを簡単に作成できます。

下記参照GETメソッドからこの後

private ModelFactory _modelFactory; 

    protected ModelFactory TheModelFactory 
    { 
     get 
     { 
      if (_modelFactory == null) 
      { 
       _modelFactory = new ModelFactory(); 
      } 
      return _modelFactory; 
     } 
    } 

あなたのプロパティを定義し、あなたのWEBAPIコントローラで

以下
public class ModelFactory 
{ 
    public StudentViewModel Create(model) 
    { 
     return new StudentViewModel 
     { 
      Id = model.Id; 
      Name = model.Name; 
     } 
    } 
} 

として

public class StudentViewModel 
{ 
    public long Id { get; set; }  
    public string Name { get; set; } 
} 

し、工場出荷時のクラスビューモデルを作成します。カスタムオブジェクトを呼び出すことができます

Public IHttpActionResult GetStudent(int id) 
{ 
Student model = new Student(); 
//Fetch data from DB and assign it to model 
return Ok(TheModelFactory.Create(model)); 
} 

希望します。

P.S. - これは私が従うアプローチです。

関連する問題