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);
}
}
答案 0 :(得分:4)
有一种富有洞察力的article in Micorosoft's website。在本文中,他们定义了一些最佳实践。例如,关于直接使用DbContext或存储库存在争议性的争论,他们已经解决了这个问题如下:
实体框架DbContext类基于工作单元和 存储库模式,可以直接从您的代码中使用,例如 来自ASP.NET Core MVC控制器。这是你可以创造的方式 最简单的代码,如在CRUD目录微服务中 eShopOnContainers。如果您想要最简单的代码, 您可能希望像许多开发人员一样直接使用DbContext类 做。
但是,实现自定义存储库可提供多种好处 在实现更复杂的微服务或应用程序时。那个单位 Work和Repository模式旨在封装 基础设施持久层,因此它与之分离 应用程序和域模型层。实现这些模式可以 便于使用模拟存储库模拟访问 数据库中。
因此,作为第一步,您可能应该改变使用Dbcontext的方式并使用存储库而不是使用存储库。本文还有更多要点和提示。