gpt4 book ai didi

entity-framework-core - Entity Framework 核心、工作单元和存储库模式

转载 作者:行者123 更新时间:2023-12-04 10:58:55 26 4
gpt4 key购买 nike

阅读了许多文章,指出不建议将 UOW 和存储库模式置于 EF Core 数据库上下文之上,我几乎同意并准备在我的一个新项目中实现注入(inject) IDBContext 的服务。

我说差不多,因为我以前使用过一个功能,但我不明白如果没有存储库如何实现。

在以前的项目中,我在 EF 上使用了 UOW 和存储库模式,并从服务访问它们。以下方法将位于存储库中,之后可以通过从任何服务调用 uow.StudentRepository.Get(id) 来调用。

public async Task<Student> Get(Guid id)
{
return await _context.Students
.Include(x => x.Course)
.Include(x=>x.Address)
.Include(x => x.Grade)
.FirstOrDefaultAsync(x => x.Id == id);
}

如果没有存储库,从 IDBContext 查询,我将不得不调用...

_context.Students
.Include(x => x.Course)
.Include(x=>x.Address)
.Include(x => x.Grade)
.FirstOrDefaultAsync(x => x.Id == id);

...每次我想做这个查询。这似乎是错误的,因为它不会干。

问题

有人可以建议我可以在没有存储库的情况下在一个地方声明此代码的方法吗?

最佳答案

听起来您需要一项服务。您可以创建 DbContext 之类的服务,以便将其注入(inject) Controller 。

IStudentService.cs:

public interface IStudentService
{
Task<List<Student>> GetStudents();
// Other students methods here..
}

StudentService.cs

public class StudentService : IStudentService
{
private readonly DataContext _context;

public StudentService(DataContext context)
{
_context = context;
}

public async Task<List<Student>> GetStudents()
{
return await _context.Students
.Include(x => x.Course)
.Include(x=>x.Address)
.Include(x => x.Grade)
.ToListAsync();
}
}

然后将服务注册到Startup.cs中的ConfigureServices()

services.AddScoped<IStudentService, StudentService>();

现在您可以将服务注入(inject)到任何 Controller 中。示例:

[ApiController]
[Route("api/[controller]")]
public class StudentController: ControllerBase
{
private readonly IStudentService _studentService;
private readonly DataContext _context;

public StudentService(DataContext context, IStudentService studentService)
{
_context = context;
_studentService = studentService;
}

[HttpGet]
public virtual async Task<IActionResult> List()
{
return Ok(await _studentService.GetStudents());
}
}

确保仅当您将在多个 Controller 上使用它时才创建该服务并避免陷入反模式。

关于entity-framework-core - Entity Framework 核心、工作单元和存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com