Mat*_*rda 2 c# entity-framework-core asp.net-core
EF Core 2.0中是否存在针对CRUD的最佳实践?
有什么方法可以自动为模型自动生成CRUD,最好使用这些最佳实践?
举例来说,这是我目前拥有的东西,但是我必须将其复制到其他20个实体中:
[Route("entities")]
public class EntitiesController : Controller
{
private readonly ProjectContext _context;
public EntitiesController(ProjectContext context)
{
_context = context;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody]Entities entity)
{
_context.Add(entity);
return Json(await _context.SaveChangesAsync() >= 1);
}
[HttpGet]
public JsonResult Get(int? entityId)
{
if (entityId == null)
return Json(_context.Entities.Select(x => x));
else
return Json(_context.Entities.FirstOrDefault(x => x.EntityId == entityId));
}
[HttpPut]
public async Task<IActionResult> Put([FromBody]Entities entity)
{
if (entity.EntityId < 1)
return BadRequest();
_context.Entities.Update(entity);
return Json(await _context.SaveChangesAsync() >= 1);
}
[HttpDelete]
public async Task<IActionResult> Delete(int entityId)
{
if (entityId < 1)
return BadRequest();
Entities entity = _context.Entities.Where(x => x.EntityId == entityId).FirstOrDefault();
if (entity == null)
return BadRequest();
_context.Entities.Remove(entity);
return Json(await _context.SaveChangesAsync() >= 1);
}
}
Run Code Online (Sandbox Code Playgroud)
Micorosoft网站上有一篇有见地的文章。在本文中,他们定义了一些最佳实践。例如,关于直接使用DbContext还是使用存储库引起争议,他们解决了以下问题:
实体框架DbContext类基于工作单元和存储库模式,可以直接在您的代码中使用,例如在ASP.NET Core MVC控制器中使用。这就是创建最简单代码的方式,如eShopOnContainers中的CRUD目录微服务中那样。如果您想要最简单的代码,则可能需要像许多开发人员一样直接使用DbContext类。
但是,在实现更复杂的微服务或应用程序时,实现自定义存储库会带来一些好处。工作单元和存储库模式旨在封装基础结构持久性层,以便将其与应用程序和域模型层分离。实现这些模式可以方便使用模拟存储库来模拟对数据库的访问。
因此,作为第一步,您应该更改使用Dbcontext的方式,并使用存储库来代替。本文还有许多要点和提示。
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |