Dotnet EF:在哪里放置数据库相关方法?

问题描述 投票:0回答:1

我刚刚开始开发 dotnet CRUD 应用程序,想知道 db 方法应该放在哪里。我们已经学习了如何为每个模型使用单独的容器类,该类具有删除、更新、编辑等方法。 我还读到您可以使用模型类而不是单独的容器类,但我不确定这将如何工作。 假设我有以下模型:

public class Student
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public DateOnly Birthday { get; set; }
}

然后我会创建一个看起来像这样的容器:

public class StudentContainer
{
    private readonly ApplicationDbContext _context;

    public StudentContainer(ApplicationDbContext context) => _context = context;

    public Student GetById(int id)
    {
        ...
    }

    public void Update(Student s)
    {
        ...
    } 
    
    ...
}

现在的问题是:将这些 GetById 和 Update 方法放在模型类中真的明智吗?如果是这样,我该如何使用 dbContext?它是静态属性吗?

欢迎所有答案和建议。

我想使用学生的构造函数,它将 dbContext 作为参数不是一个有效的解决方案。

c# asp.net database entity-framework razor
1个回答
0
投票

连接类可以由.NET自动注入,作为控制器构造方法中的参数之一。 DBContext设置,例如连接字符串可以在Web应用程序的配置文件中设置。也就是说,简而言之,如果您将类“StudentController”放置在 Web 应用程序的 Controllers 文件夹中,而不是“StudenContainer”,则在该类的构造函数方法中,您将拥有连接类“context”,并且可以使用它。 您可以使用 DBContext 作为 StudenContainer 类构造函数方法的参数,并在实例化期间传递给它。 当然,模型本身是否可以与数据库一起工作是有讨论的,有不同的意见。

注:

在 ASP .NET MVC Web 应用程序中,对于发送到服务器的每个请求,控制器中的操作方法都会做出响应,并且在执行该方法之前,必须在内存中创建该控制器的实例。因此,将连接类存储在静态变量或内部字段中并不是一个好主意,并且可能会导致问题。如果你打算保存它,最好有 SessionID 和 UserID 并使用 Multiton 模式管理连接类。

© www.soinside.com 2019 - 2024. All rights reserved.