Asp.net mvc 在MVC中,我什么时候将特定的数据访问逻辑放入模型中?
开箱即用,当您使用Entity Framework在MVC中创建控制器时,您将获得基本的get语句,这些语句将数据拉入控制器以显示在视图中。例如:Asp.net mvc 在MVC中,我什么时候将特定的数据访问逻辑放入模型中?,asp.net-mvc,entity-framework,model-view-controller,separation-of-concerns,Asp.net Mvc,Entity Framework,Model View Controller,Separation Of Concerns,开箱即用,当您使用Entity Framework在MVC中创建控制器时,您将获得基本的get语句,这些语句将数据拉入控制器以显示在视图中。例如: public ActionResult Index() { var capsules = db.capsules.ToList(); return View(capsules); } 按照我的理解,编写MVC代码的最佳方法是将特定于数据的逻辑放在模型项目中。然后,控制器在逻辑所在的任何模型类中
public ActionResult Index()
{
var capsules = db.capsules.ToList();
return View(capsules);
}
按照我的理解,编写MVC代码的最佳方法是将特定于数据的逻辑放在模型项目中。然后,控制器在逻辑所在的任何模型类中调用该方法,检索数据,然后将其发送到视图。上面的示例只是检索一个胶囊列表——非常基本。我没有创建一个特殊的“CapsuleModelContext”类来处理胶囊检索操作,因为它是在我的edmx文件中处理的
我想这一切都归结为这样一个问题:我是否应该在控制器中实例化dbContext,或者在模型的context类中实例化dbContext。开箱即用,dbContext在控制器内实例化。这里有关于最佳实践的建议吗?请区分您的域模型和视图模型。视图模型不负责持久化数据。视图模型只是作为实体的容器存在,这些实体在视图之间传递。很简单,它们是视图的模型,而不是视图设计用来操作的持久化数据 考虑到这一点,您应该使用控制器与用于操作持久化数据的任何实体(无论是存储库还是更直接的数据库上下文)进行交互。视图模型用作一种媒介,通过它将数据从您的视图传送到您的控制器,控制器反过来将您的字段映射到它所属的任何业务实体,并与您选择的持久化方法交互。视图模型和业务实体模型应该互不了解 您的视图模型应该包含的唯一逻辑(理想情况下,应该将其保持在最低限度)是仅特定于该视图模型本身的逻辑 我发布了一个类似问题的另一个答案,它展示了这在实践中是如何工作的:
请区分您的域模型和视图模型。视图模型不负责持久化数据。视图模型只是作为实体的容器存在,这些实体在视图之间传递。很简单,它们是视图的模型,而不是视图设计用来操作的持久化数据 考虑到这一点,您应该使用控制器与用于操作持久化数据的任何实体(无论是存储库还是更直接的数据库上下文)进行交互。视图模型用作一种媒介,通过它将数据从您的视图传送到您的控制器,控制器反过来将您的字段映射到它所属的任何业务实体,并与您选择的持久化方法交互。视图模型和业务实体模型应该互不了解 您的视图模型应该包含的唯一逻辑(理想情况下,应该将其保持在最低限度)是仅特定于该视图模型本身的逻辑 我发布了一个类似问题的另一个答案,它展示了这在实践中是如何工作的:
谢谢您提供的信息,但我不是在问域模型和视图模型之间的区别。我理解视图模型背后的原因。我问的是DbContext是否应该在控制器(开箱即用)或模型的上下文中实例化。就MVC模式而言——这似乎是您要问的——您的DbContext应该在控制器中实例化,而不是在模型中实例化。是否从控制器中直接实例化DbContext(通过使用服务层或存储库)中抽象出来是另一回事。无论如何,我看不出在域模型或视图模型中实例化DbContext会有什么好处!感谢您提供的信息,但我并不是在问域模型和视图模型之间的区别。我理解视图模型背后的原因。我问的是DbContext是否应该在控制器(开箱即用)或模型的上下文中实例化。就MVC模式而言——这似乎是您要问的——您的DbContext应该在控制器中实例化,而不是在模型中实例化。是否从控制器中直接实例化DbContext(通过使用服务层或存储库)中抽象出来是另一回事。无论如何,我看不出在域模型或视图模型中实例化DbContext会有什么好处!