1

私のWebAPIコントローラーでは、次のように結果をメソッド呼び出しに返します。

// GET api/profile/5
public VCompleteProjectProfile GetBasicProjectProfile(int id)
{
    return _dbss.GetBasicProfile(id);
}

そして、これが実際の結果です:

{
    "$id":"1",
    "Id":1,
    "ProjectName":"Caribbean Challenge",
    "IsMrRcSelected":true,
    "IsMrdProject":true,
    "RegionName":"North America",
    "EntityKey":{
        "$id":"2",
        "EntitySetName":"VCompleteProjectProfile",
        "EntityContainerName":"MrdViewEntities",
        "EntityKeyValues":[
            {"Key":"Id","Type":"System.Int32","Value":"1"},
            {"Key":"ProjectName","Type":"System.String","Value":"Caribbean Challenge"},
            {"Key":"IsMrRcSelected","Type":"System.Boolean","Value":"True"}
        ]
    }
}

抑制できEntityKeyますか?もしそうなら、どのように?これはMVC4です。

ありがとうエリック

4

1 に答える 1

1

実際のエンティティオブジェクトを返す代わりに、結果のDTO/POCOを作成します。

var entity = _dbss.GetBasicProfile(id);
return new ProfileDto()
{
    Id = entity.Id,
    ProjectName = entity.ProjectName,
    ....
};

エンティティタイプを拡張して、ToDtoこれを実行するという関数を含めることもできます。

public partial class ProfileEntity
{
    public ProfileDto ToDto()
    {
        return new ProfileDto()
        {
            Id = this.Id,
            ProjectName = this.ProjectName,
            ....
        };
    }
}

....

var entity = _dbss.GetBasicProfile(id);
return entity.ToDto();

一般的な経験則では、必要なデータのみを返すことです。便利だからといって手抜きをしないでください。

また、 AutoMapperのようなものを見て、あちこちでこれをしなければならないことに気付いた場合は、あなたの生活がずっと楽になります。

于 2012-07-09T12:20:13.857 に答える