Dal(使用实体框架)和模型层到 MVC 中
本文关键字:模型 MVC 实体 框架 Dal | 更新日期: 2023-09-27 18:31:09
首先,我将EF用于Dal层(将项目与MVC分开,相同的解决方案)。从 EF 的 EDMX 文件生成的模型是来自模型层的实际模型??如果是这样,我如何访问这些模型以在 MVC 的视图层中工作?我认为直接从视图访问数据层以使用这些模型是错误的,如果我使用"我的模型"制作模型层并将 Dal 的模型转换为我的模型......它将是重复的代码。
可能我弄错了,但大多数 egs 都是使用代码优先的方法,我无法弄清楚这一点。
您的想法是正确的,即不直接从表示层访问 DAL 中的模型。
为了避免在将 DAL 对象转换为视图使用的模型时重复代码,可以使用类似 AutoMapper 的东西,它应该在完全在这种情况下为你完成繁重的工作。
我认为直接从视图访问数据层以使用这些模型是错误的......
没错,适当的方法是使用View Model
当您有几十个不同的值要传递给视图时,同样的灵活性允许您 快速添加新条目或重命名现有条目,成为您最大的敌人。你留在你的 拥有跟踪项目名称和值;您不会从Microsoft智能感知和编译器那里获得任何帮助。 处理软件复杂性的唯一行之有效的方法是通过适当的设计。因此,为每个视图定义一个对象模型有助于跟踪该视图真正需要的内容。我建议你定义一个 添加到应用程序中的每个视图的视图模型类。
-- Dino Esposito的"Programming Microsoft ASP.NET MVC"
视图模型提供视图自身创建所需的所有信息。要从 ViewModel 和业务实体传输数据,您可以使用 AutoMapper。
不用担心重复,这是两个不同的概念,应该彼此分开;它使您的应用程序易于维护。
我可能弄错了,但对我来说,使用 EDMX 生成为您提供了可被视为 DAL 的 DbContext 和可被视为模型的实体。
因此,您可以直接将实体实例作为业务对象进行操作。通过 DbContext 对基础的操作应出现在 BLL 层中。此外,您可以在需要时实施 DTO。
当然,这假定您希望使用实体框架代码生成。考虑到您的整体架构,使用 POCO 等其他选项可能更相关。
我在本地项目中使用视图模型,在其他项目中使用模型。然后将对我将在我的视图模型中的页面上使用的模型的引用。然后在我的页面上引用视图模型。让我知道这听起来是否像您想做的事情,我可以在一些代码中进行编辑。