entity-framework - EF coreTracking 与非跟踪查询
问题描述
我是 EF 核心 6 的新手。我遇到了跟踪与非跟踪查询。我很困惑在哪里使用它。我的目标是编写一个带有 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
}
}
推荐阅读
- ruby-on-rails - 没有原始数据 (Omniauth-vkontakte)
- groovy - 从包中的类的根文件夹中导入类:无法解析类
- php - 我们可以避免在大量记录中雄辩吗
- php - Livewire $this->resetPage() 有时有效,有时无效
- jquery - 获取 livewire 组件的预选值
- jquery - Laravel Mix、Jquery、Materialize ''$(...).collapsible 不是函数"
- python - 通过读取 XML 文件的内容创建 lambda 函数
- tuples - 通过映射匹配元组中的值
- c - 要求用户重复该程序
- python-3.x - 编写一个程序来检查一个字符串的后缀与另一个字符串的前缀是否重叠