我正在使用ASP.NET MVC 5和Entity framework 6创建一个新的项目(网络应用程序)。在ASP.Net web表单应用中,我曾经使用过3层架构,但是我对处理entity framework、models等方面感到困惑。
那么,在MVC中如何构建3层架构,并且是否可以使用entity framework?
我正在使用ASP.NET MVC 5和Entity framework 6创建一个新的项目(网络应用程序)。在ASP.Net web表单应用中,我曾经使用过3层架构,但是我对处理entity framework、models等方面感到困惑。
那么,在MVC中如何构建3层架构,并且是否可以使用entity framework?
你可以实现一个三层或类似的架构。
ASP.NET MVC与Entity Framework有很好的配合。甚至在默认的ASP.NET MVC模板中,EF被安装并用于用户/角色管理(身份验证)。
典型的ASP.NET MVC应用程序由模型、视图和控制器组成。简要地说:
通常,控制器会接收一些viewModel,对其进行验证、处理,并返回某些操作结果(视图、部分视图、JSON、文件等)。在处理过程中,控制器可以初始化Entity Framework上下文,并通过EF数据库上下文获取或保存数据等。
“尽可能保持控制器尽可能薄”几乎总是一个好主意,因此许多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 -->
是的,您可以实现3层架构:
- 层(表示层):视图(这就是MVC中V的含义)
- 层(逻辑层):通常是模型和一些帮助类(这就是M的含义)
- 层(数据层):借助Entity Framework的帮助,您可以从模型创建数据库。
这里有一个关于如何在ASP.NET MVC中使用Entity Framework的教程。
以下是如何实现三层架构:
表示层包括(MVC)
业务逻辑层将包括(C#编程 - 一个dll)
数据访问层将包括(C#编程与实体框架或-一个dll)
业务对象层将包括(实体框架模型)
参考:http://www.codeproject.com/Articles/841324/ASP-NET-MVC-Web-App-on-Tier-for-Beginners