我刚刚开始开发 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 作为参数不是一个有效的解决方案。
连接类可以由.NET自动注入,作为控制器构造方法中的参数之一。 DBContext设置,例如连接字符串可以在Web应用程序的配置文件中设置。也就是说,简而言之,如果您将类“StudentController”放置在 Web 应用程序的 Controllers 文件夹中,而不是“StudenContainer”,则在该类的构造函数方法中,您将拥有连接类“context”,并且可以使用它。 您可以使用 DBContext 作为 StudenContainer 类构造函数方法的参数,并在实例化期间传递给它。 当然,模型本身是否可以与数据库一起工作是有讨论的,有不同的意见。
注:
在 ASP .NET MVC Web 应用程序中,对于发送到服务器的每个请求,控制器中的操作方法都会做出响应,并且在执行该方法之前,必须在内存中创建该控制器的实例。因此,将连接类存储在静态变量或内部字段中并不是一个好主意,并且可能会导致问题。如果你打算保存它,最好有 SessionID 和 UserID 并使用 Multiton 模式管理连接类。