C# 当通过Web API公开实体时,是否应该将其与EF上下文分离

C# 当通过Web API公开实体时,是否应该将其与EF上下文分离,c#,asp.net-mvc-3,entity-framework,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc 3,Entity Framework,Asp.net Mvc 4,Asp.net Web Api,我使用的是EF5代码优先的方法,我只是想知道,当通过Web API公开实体时,是否应该将其与EF上下文分离 假设我有API动作方法 [HttpGet] public HttpResponseMessage Get(int id) { var user = _userRepository.GetById(id); if (user != null) { // detach here??? _userRepository.Detach(use

我使用的是EF5代码优先的方法,我只是想知道,当通过Web API公开实体时,是否应该将其与EF上下文分离

假设我有API动作方法

[HttpGet]
public HttpResponseMessage Get(int id)
{
    var user = _userRepository.GetById(id);

    if (user != null)
    {
        // detach here???
        _userRepository.Detach(user);

        return Request.CreateResponse(HttpStatusCode.Found, user);
    }

    return Request.CreateErrorResponse(HttpStatusCode.NotFound, string.Format("No user with id={0} is found", id));
}

实际上,这方面的最佳实践是什么?我是否应该创建实体的投影,然后将其公开?

我认为没有必要进行分离,当您取回它时,它将自动分离


但是考虑到您只在请求/响应环境中使用它,那么首先使用该选项加载它是明智的。消除您永远不会使用的功能的开销

就我个人而言,我不会把实体送回去。我将为它创建一个基本类,并使用AutoMapper(或类似的东西)将实体映射到DTO类。