实体框架Core 2.0 CRUD最佳实践/自动化

时间:2017-12-21 12:31:21

标签: c# asp.net-core entity-framework-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);
    }
}

1 个答案:

答案 0 :(得分:4)

有一种富有洞察力的article in Micorosoft's website。在本文中,他们定义了一些最佳实践。例如,关于直接使用DbContext或存储库存在争议性的争论,他们已经解决了这个问题如下:

  

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

     

但是,实现自定义存储库可提供多种好处   在实现更复杂的微服务或应用程序时。那个单位   Work和Repository模式旨在封装   基础设施持久层,因此它与之分离   应用程序和域模型层。实现这些模式可以   便于使用模拟存储库模拟访问   数据库中。

因此,作为第一步,您可能应该改变使用Dbcontext的方式并使用存储库而不是使用存储库。本文还有更多要点和提示。