Dal(带Entity Framework)和Model层进入MVC

时间:2013-09-13 14:23:33

标签: c# asp.net-mvc entity-framework model-view-controller data-access-layer

首先,我将EF用于 Dal 层(来自MVC的separeted项目,同样的解决方案)。 EF的EDMX文件生成的模型是模型层的实际模型?如果是这样,我如何访问这些模型以在MVC的查看层中工作?我认为直接从视图访问数据层以使用这些模型是错误的,如果我使用“我的模型”创建模型图层并将Dal的模型转换为我的模型......它将被复制代码。

可能我错了,但大多数都是错的。用代码第一种方法,我无法弄清楚这一点。

4 个答案:

答案 0 :(得分:3)

您的想法是直接从您的表示层访问DAL中的模型。

为了避免在将DAL对象转换为视图使用的模型时重复代码,您可以使用类似AutoMapper的内容,它应该在这种情况下为您进行重量级提升。

答案 1 :(得分:2)

  

我认为直接从视图访问数据层以使用这些模型是错误的......

没错,适当的方法是使用View Model

  

当您有许多不同的值传递给视图时,您可以获得相同的灵活性   快速添加新条目,或重命名现有条目,成为你最大的敌人。你留在你的   拥有跟踪项目名称和值;你没有得到Microsoft IntelliSense和编译器的帮助。   处理软件复杂性的唯一可靠方法是通过适当的设计。因此,为每个视图定义对象模型可帮助您跟踪视图真正需要的内容。我建议你定义一个   您添加到应用程序的每个视图的视图模型类

- Dino Esposito编写的“Microsoft ASP.NET MVC编程”

ViewModel提供了视图所需的所有信息。要从ViewModel和业务实体传输数据,您可以使用AutoMapper

不要担心重复,这是两个不同的概念,应该相互分离;它使您的应用程序易于维护。

答案 2 :(得分:1)

我可能会误解,但对我来说,使用EDMX生成为您提供的DbContext可以被视为DAL和可以被视为模型的实体。

因此,您可以直接将实体实例作为业务对象进行操作。通过DbContext操作基础应该出现在BLL层中。此外,您可以根据需要实施DTO。

当然,这假设您希望使用实体框架代码生成。考虑到整体架构,使用POCO等其他选项可能更具相关性。

答案 3 :(得分:0)

我在本地项目中使用视图模型,在另一个项目中使用模型。然后在我的视图模型的页面上引用我将要使用的模型。然后在我的页面上引用视图模型。让我知道这听起来像你想要做的事情,我可以用一些代码进行编辑。