1

在我的 Web API 控制器中,我将结果返回给方法调用,如下所示:

// 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 回答