Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3架构中不需要DAL层吗?_C#_Asp.net_.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# MVC3架构中不需要DAL层吗?

C# MVC3架构中不需要DAL层吗?,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 3,可能重复: 我刚刚开始使用MVC3模式。我们如何在MVC3中进行数据访问?我们是将“模型”作为数据访问层还是添加另一个“DAL”层并从“模型”层调用它?当我在处理上一个MVC3项目时,我从各种示例(如Geekdiner)中了解到实体框架充当数据访问层。您的模型可以是直接映射的数据访问对象,但不一定非得如此。它们也可以是后端DAL的代理,根据您的需求和项目寿命,后端DAL始终是更好的选择 对于较大的项目,我倾向于使用一个单独的名称空间,名为Project.Entities,其中包含我的实体框架数

可能重复:


我刚刚开始使用MVC3模式。我们如何在MVC3中进行数据访问?我们是将“模型”作为数据访问层还是添加另一个“DAL”层并从“模型”层调用它?

当我在处理上一个MVC3项目时,我从各种示例(如Geekdiner)中了解到实体框架充当数据访问层。

您的模型可以是直接映射的数据访问对象,但不一定非得如此。它们也可以是后端DAL的代理,根据您的需求和项目寿命,后端DAL始终是更好的选择

对于较大的项目,我倾向于使用一个单独的名称空间,名为
Project.Entities
,其中包含我的实体框架数据模型。我的
Project.Models
将包含使用实体作为其数据备份存储的模型,并提供操作该数据的常用方法(如有必要)。它可能不是最好的方法,但提供了最大的灵活性,并坚持将数据模型与支持存储区分开,从而允许更多的抽象。例如,您始终可以将底层数据层切换到内存中存储、实体框架以外的其他DAL或任何其他存储


对于较小的/临时的/测试项目,我的实体框架数据模型将直接在
项目中使用。模型
直接使用,因为它更快,不需要太多思考。

不,模型不是数据访问。模型是用来保存数据的类的集合,它通常不包含代码,除了验证是否允许指定值之外


您可以从控制器访问数据。如何做到这一点完全取决于您,MVC并不重要。

您的模型应该独立于数据访问内容,这将允许您在将来更改DAL策略

您应该从DAL提供模型,但是模型不应该知道它是如何构造的,当然也不应该包含任何特定于数据库的代码


如果您采用我建议的方法,请查看AutoMapper—一个非常有用的工具,用于在DAL和模型类之间映射数据。

模型是您的视图模型,而不是域模型

如果您想执行DAL活动,我倾向于将其包装在可注入控制器的存储库/服务中


这可以防止控制器膨胀,还可以模拟DAL层对控制器进行单元测试。

你说得对;修改我的答案以反映您的反馈。这已经被问了很多很多次了。问题是我们的应用程序是否需要更大的灵活性??答案是肯定的!!正如我们的投稿人在这篇文章中所建议的那样,有很多可用的例子,不管你的想法是什么,你想在你的系统中使用DAL,我想将我的事务与Db和应用程序逻辑分开,因此,如果其中任意两个中的一个面临任何升级,或者如果有任何更改,则不需要同时干扰我们的数据库或应用程序、DBContext类和应用程序之间的层、接口或抽象类。