EF coreTracking 与非跟踪查询
EF coreTracking vs Non Tracking query
我是 EF 核心 6 的新手。我遇到了跟踪与非跟踪查询。我很困惑在哪里使用它。我的 objective 是用 ef 核心编写一个 webapi,我认为不需要跟踪查询。有人可以澄清两者之间的区别吗?对于 webapi 是否需要跟踪查询。请帮我解决这个问题。
如果您要更新实体,请使用跟踪查询,以便在对 DbContext 调用 SaveChanges 时保留更改。如果操作是只读的(即 HTTP GET),则使用非跟踪查询。
例如对于 WebApi 控制器:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
// non-tracking
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
// non-tracking
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
// tracking
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
// tracking
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
// tracking
}
}
我是 EF 核心 6 的新手。我遇到了跟踪与非跟踪查询。我很困惑在哪里使用它。我的 objective 是用 ef 核心编写一个 webapi,我认为不需要跟踪查询。有人可以澄清两者之间的区别吗?对于 webapi 是否需要跟踪查询。请帮我解决这个问题。
如果您要更新实体,请使用跟踪查询,以便在对 DbContext 调用 SaveChanges 时保留更改。如果操作是只读的(即 HTTP GET),则使用非跟踪查询。
例如对于 WebApi 控制器:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
// non-tracking
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
// non-tracking
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
// tracking
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
// tracking
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
// tracking
}
}