在本教程中创建的所有ASP.NET MVC应用程序中,我们一直在将硬编码数据从Controllers传递到View模板,但是,为了构建真实的Web应用程序,您可能需要使用真实的数据库,在本章中,我们将看到如何使用数据库引擎来存储和检索应用程序所需的数据。

为了存储和检索数据,我们将使用称为Entity Framework的.NET Framework数据访问技术来定义和使用模型。

让我们看一个简单的示例,在该示例中,我们将在示例中添加对Entity框架的支持。

第1步-要安装实体框架,请右键单击您的项目,然后选择 NuGet Package Manager→Manage NuGet Packages for Solution…

Install Entity Framework

它将打开 NuGet Package Manager,在搜索框中搜索实体框架。

Search Entity Framework

选择实体框架,然后单击"Install"按钮,它将打开"Preview"对话框。

Select Entity Framework

单击确定继续。

License Acceptance

点击"I Accept"按钮开始安装。

I Accept Button

一旦安装了Entity Framework,您将在窗口外看到消息,如上面的屏幕截图所示。

添加DBContext

我们需要向员工模型添加另一个类,该类将与Entity Framework通信,以使用以下代码检索和保存数据。

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

using System.Web;

namespace MVCSimpleApp.Models{
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
	
   public class EmpDBContext : DbContext{
      public EmpDBContext()
      { }
      public DbSet<Employee> Employees { get; set; }
   }
}

如上所述, EmpDBContext 是从称为 DbContext 的EF类派生的,在此类中,我们有一个名称为DbSet的属性,该属性基本上表示您要查询和保存的实体。

连接配置

我们需要在Web.config文件中的数据库的<configuration>标签下指定连接字符串。

<connectionStrings>
   <add name = "EmpDBContext" connectionString = "Data
   Source=(LocalDb)\v14.0;AttachDbFilename=|DataDirectory|\EmpDB.mdf;Initial
   Catalog=EmployeeDB;Integrated Security=SSPI;"
   providerName = "System.Data.SqlClient"/>
</connectionStrings>

您实际上不需要添加EmpDBContext连接字符串,如果您不指定连接字符串,则Entity Framework将使用DbContext类的完全限定名称在用户目录中创建localDB数据库,对于此演示,我们不会添加连接字符串以使事情变得简单。

现在,我们需要更新EmployeeController.cs文件,以便实际上可以从数据库保存和检索数据,而不是使用硬编码数据。

首先,我们添加一个私有的EmpDBContext类对象,然后更新Index,Create和Edit操作方法,如下面的代码所示。

using MVCSimpleApp.Models;
using System.Linq;
using System.Web.Mvc;

namespace MVCSimpleApp.Controllers {
   public class EmployeeController : Controller{
      private EmpDBContext db = new EmpDBContext();
      //GET: Employee
		
      public ActionResult Index(){
         var employees = from e in db.Employees
         orderby e.ID
         select e;
         return View(employees);
      }
		
      //GET: Employee/Create
      public ActionResult Create(){
         return View();
      }
		
      //POST: Employee/Create
      [HttpPost]
      public ActionResult Create(Employee emp){
         try{
            db.Employees.Add(emp);
            db.SaveChanges();
            return RedirectToAction("Index");
         }catch{
            return View();
         }
      }
		
      //GET: Employee/Edit/5
      public ActionResult Edit(int id){
         var employee = db.Employees.Single(m => m.ID == id);
         return View(employee);
      }
		
      //POST: Employee/Edit/5
      [HttpPost]
      public ActionResult Edit(int id, FormCollection collection){
         try{
            var employee = db.Employees.Single(m => m.ID == id);
            if (TryUpdateModel(employee)){
               //To Do:- database code
               db.SaveChanges();
               return RedirectToAction("Index");
            }
            return View(employee);
         }catch{
            return View();
         }
      }
   }
}

然后,我们使用以下URL http://localhost:63004/Employee 运行此应用程序。您将看到以下输出。

Name JoiningDate Age

如您所见,视图上没有数据,这是因为我们没有在数据库中添加任何记录,该记录是由Visual Studio创建的。

让我们转到SQL Server Object Explorer,您将看到数据库的创建与我们在DBContext类中使用的名称相同。

DBContext Class

让我们扩展该数据库,您将看到它有一个表,其中包含我们在Employee模型类中拥有的所有字段。

Employee Model Class

要查看此表中的数据,请右键单击"Employees"表,然后选择"View Data"。

Employee Table View Data

您会看到我们目前没有记录。

No Records Moment

让我们直接在数据库中添加一些记录,如以下屏幕截图所示。

Add Records in Database

刷新浏览器,您将看到数据现在已从数据库更新到视图。

Updated View

通过点击"Create New"链接,从浏览器中添加一条记录,它将显示创建视图。

Create View

让我们在以下字段中添加一些数据。

Add Some Data

单击创建按钮,它将更新索引视图以及将此新记录添加到数据库。

New Record Database

现在,我们去SQL Server对象资源管理器并刷新数据库,右键单击雇员表,然后选择查看数据菜单选项,您将看到该记录已添加到数据库中。

Record Added in Database

参考链接

https://www.learnfk.com/asp.net_mvc/asp.net-mvc-databases.html