我们如何使用EF在ASP.Net MVC应用程序中创建3层架构?

时间:2015-02-10 12:14:14

标签: c# .net asp.net-mvc entity-framework-6 3-tier

我正在使用Entity框架6在ASP.NET MVC 5中创建一个新项目(Web应用程序)。我使用ASP.Net Web表单应用程序在3层架构中工作,但我很难处理实体框架,模型等。 那么,我如何使用EF在MVC中构建3层架构,并且可以与实体框架一起使用?

3 个答案:

答案 0 :(得分:6)

是的,您可以实施3 / N层架构(或类似的东西)。

ASP.NET MVC与实体框架有很好的合作。 EF甚至已安装并用于默认ASP.NET MVC模板中的用户/角色管理(标识)。

典型的ASP.NET MVC应用程序由模型,视图和控制器组成。简而言之:

  • 模型是POCO。该模型封装了数据,它负责数据的有效性。类比 - 这是应用程序层的一部分和数据层的一部分。数据层还包括EF db上下文类。
  • 视图是生成html的.cshtml文件,可以强类型化(有模型)。类比 - 这是表示层。
  • 控制器负责处理HTTP请求,检索数据模型并将模型传递给视图。类比 - 这是应用程序层(业务逻辑)的一部分。

通常,控制器将接收一些viewModel,验证它,处理它,并返回一些动作结果(视图,部分视图,JSON,文件等)。在流程部分,控制器可以初始化实体框架上下文,并通过EF db上下文等获取或保存数据到数据库。

保持控制器尽可能薄,这几乎总是一个好主意#34;这么多ASP.NET MVC解决方案使用存储库/工作单元或服务模式。

使用服务创建某个实体的MVC应用程序的一些典型部分的示例:

<强>服务

// Connect to database through entity framework db context.
public interface IMyService
{
    MyDbContext DbContext { get; set; }

    IQueryable<Something> GetSomething( ... query params ... );
    void CreateSomething(Something model);
    // etc. 
}

<强>控制器

public MyController
{
    private IMyService myService;

    public MyController(IMyService myService)
    {
        this.myService = myService;
    }

    // Showing create/edit form
    [HttpGet]
    public ActionResult CreateSomething()
    {
        // Create Empty view model. new SomeViewModel(); for example.
        // Get some nomenclatures for dropdowns etc. through the service (if needed).
        // return View(viewModel);
    }

    // Processing the post request
    [HttpPost]
    public ActionResult CreateSomething(SomeViewModel viewModel)
    {
        // Check validity of viewModel (ModelState.IsValid)
        // If not valid return View(viewModel) for showing validation errors
        // If valid map the viewModel to Model (through AutoMapper or custom mapping)
        // Call myService CreateSomething method.
        // Redirect to page with details.
    }
}

<强>模型

public class Something
{
    public int Id { get; set; }
    public string Name { get; set; }
    // .. more properties (can be decorated with validation attributes)
}

演示文稿视图模型

// View model for Something class. Including only properties related to the current UI.

public class SomeViewModel
{
    public int Id { get; set; }
    // .. more properties (can be decorated with validation attributes)
}

查看

@model SomeViewModel

<!-- Form -->

@Html.ValidationForModel()
@Html.EditorForModel()
submit button

<!-- /Form -->

答案 1 :(得分:1)

是的,您可以实施3层架构:

  
      
  1. Tier(Presentation):Views(这是V代表MVC的内容)
  2.   
  3. Tier(逻辑):通常是模型和一些Helperclasses(这是M代表的)
  4.   
  5. Tier(数据):在实体框架的帮助下,您可以从模型中创建数据库。
  6.   

Here's关于如何在ASP.NET MVC中使用实体框架的教程。

答案 2 :(得分:-1)

以下是实施3层的方法:

表示层包括(MVC)
业务逻辑层将包括(C#编程 - 一个DLL)
数据访问层将包括(C#编程与实体框架或dll)
业务对象层将包括(实体框架模型)

参考:http://www.codeproject.com/Articles/841324/ASP-NET-MVC-Web-App-on-Tier-for-Beginners