实体框架核心2.0 CRUD最佳做法/自动化

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)

Ehs*_*edi 5

Micorosoft网站上一篇有见地的文章。在本文中,他们定义了一些最佳实践。例如,关于直接使用DbContext还是使用存储库引起争议,他们解决了以下问题:

实体框架DbContext类基于工作单元和存储库模式,可以直接在您的代码中使用,例如在ASP.NET Core MVC控制器中使用。这就是创建最简单代码的方式,如eShopOnContainers中的CRUD目录微服务中那样。如果您想要最简单的代码,则可能需要像许多开发人员一样直接使用DbContext类。

但是,在实现更复杂的微服务或应用程序时,实现自定义存储库会带来一些好处。工作单元和存储库模式旨在封装基础结构持久性层,以便将其与应用程序和域模型层分离。实现这些模式可以方便使用模拟存储库来模拟对数据库的访问。

因此,作为第一步,您应该更改使用Dbcontext的方式,并使用存储库来代替。本文还有许多要点和提示。