Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 我是否了解ASP.NET MVC和实体框架的体系结构设计?_C#_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 我是否了解ASP.NET MVC和实体框架的体系结构设计?

C# 我是否了解ASP.NET MVC和实体框架的体系结构设计?,c#,sql-server,asp.net-mvc,entity-framework,C#,Sql Server,Asp.net Mvc,Entity Framework,我目前正在一个使用Active Directory和SQL Server 2008的intranet网站上工作。我已经选择了ASP.NET的MVC设计模式,现在正试图找出如何使用实体框架为我的项目中的数据访问部分获得合适的体系结构。为了不走错方向,我已经挣扎了好几天(知道我是公司里唯一的开发人员,这是我的第一次体验,没有人知道最近的框架)。我读过关于建筑和如何正确使用建筑的书,但我不确定我是否正确地掌握了一切() 下面是我想做的,每一层都有自己的项目(请原谅我的绘画技巧): Controller

我目前正在一个使用Active Directory和SQL Server 2008的intranet网站上工作。我已经选择了ASP.NET的MVC设计模式,现在正试图找出如何使用实体框架为我的项目中的数据访问部分获得合适的体系结构。为了不走错方向,我已经挣扎了好几天(知道我是公司里唯一的开发人员,这是我的第一次体验,没有人知道最近的框架)。我读过关于建筑和如何正确使用建筑的书,但我不确定我是否正确地掌握了一切()

下面是我想做的,每一层都有自己的项目(请原谅我的绘画技巧):

Controller(MVC项目)--使用-->服务层(项目)--使用-->EFDal(项目)
^                         |        ^                          |
|                         |        |                          |

| 你几乎在正确的方向上。但是,在这种情况下,
ViewModel
应该位于应用程序层,即您的
MVC
层。服务层应该反过来返回一个数据传输对象,通常称为
DTO

ViewModel
看作是为
View
构建的一个简单的
POCO
类,它可以是各种服务从服务层返回的各种
DTO
的集合

DTO的好处

  • 您没有直接公开域实体,即EntityFramework
    POCO
    类。然而,可以为一个小到足以避免所有的
    DTO
    的项目提供一个案例
  • 如果将来您决定在
    MVC
    项目中添加一个
    WebAPI
    函数,比如iPhone应用程序。新应用程序使用同样使用服务层的
    WebAPI
    ,大多数服务层代码都可以重用,因为它们返回
    DTO
    类,而不是为
    视图本身构建的
    ViewModel
  • 对于你的数据访问层,没有人比这家伙解释得更好


    至于项目结构,我建议采用洋葱式架构。如果您能很好地理解本文,您应该已经准备好了。

    根据应用程序的大小,有许多可能的体系结构。对于较小的应用程序,您可能只需要一个引用EF的MVC项目即可。我们中的大多数都是中型的,我们为EF stuff(上下文、流畅、迁移)App.Entities创建App.Data,为POCO模型创建App.Entities,为UI创建App.MVC,然后使用Automapper创建ViewModels。“这是另一个选择。”史蒂夫格林谢谢你的回答。这正是我想要的。虽然从未使用过Automapper,也不确定我是否需要它,我所有的DB表都很简单,我只是有很多。至少从我所了解的情况来看,Automapper用于复杂对象?我真的说不出这个应用程序有多大,但公司有4.5万名员工(还有一名实习生在做这类工作……),需要通过Active Directory或SQL Server管理许多不同的操作,因此我需要良好的性能。性能和体系结构通常是权衡的。EF不是性能最好的数据访问技术。看见“这是Dapper如此得体的原因之一。”SteveGreene在一篇有趣的文章中说,尽管他们说优化EF请求确实有助于提高性能。但我确实需要一个高性能的数据访问,因为该项目的一个基础是使其比已经投入生产的更快。我会去看看哪一个最适合我的需要谢谢!即使对于我们最大的应用程序,EF的性能也足够好,但堆栈溢出型卷是另一回事broken@IvanJazz好的,谢谢!我会马上读这些文章(还有Mosh的视频,总是在重点上!)。那么ViewModel POCO将创建服务层类的实例,对吗?在服务层中,我有一个类及其相应的接口?@Flexabustbergson
    ViewModel poco
    由MVC应用程序的控制器通过调用服务层中的各种服务来构建。如果您打算真正地将应用程序与其服务解耦,那么是的,为每个服务提供接口是可取的,因为它有助于单元测试和模拟。在您发布的onion archirecture文章中,有一件事我不明白:在第一个文件夹01域中,我的所有DB POCO都将去哪里?我应该为每个数据库添加一个新项目吗?如果我有其他业务逻辑,我应该把它放在那里,每个类都有一个接口?@Flexabustbergson是的,您的DB POCO位于Domain.Entities中。业务逻辑是项目服务中的服务层的一部分。不过,您不必完全遵循本文所做的,主要的收获是每个项目的依赖性,即添加到每个项目的正确引用。
    Controller(MVC Project) ---uses---> Service Layer (Project) ---uses--> EFDal (Project)
                   ^                         |        ^                          |
                   |                         |        |                          |
                   |<-------<-----returns ViewModel   |<---------<------returns Query Result