在本教程中创建的所有ASP.NET MVC应用程序中,我们一直在将硬编码数据从Controllers传递到View模板,但是,为了构建真实的Web应用程序,您可能需要使用真实的数据库,在本章中,我们将看到如何使用数据库引擎来存储和检索应用程序所需的数据。
为了存储和检索数据,我们将使用称为Entity Framework的.NET Framework数据访问技术来定义和使用模型。
让我们看一个简单的示例,在该示例中,我们将在示例中添加对Entity框架的支持。
第1步-要安装实体框架,请右键单击您的项目,然后选择 NuGet Package Manager→Manage NuGet Packages for Solution…
它将打开 NuGet Package Manager,在搜索框中搜索实体框架。
选择实体框架,然后单击"Install"按钮,它将打开"Preview"对话框。
单击确定继续。
点击"I Accept"按钮开始安装。
一旦安装了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 运行此应用程序。您将看到以下输出。
如您所见,视图上没有数据,这是因为我们没有在数据库中添加任何记录,该记录是由Visual Studio创建的。
让我们转到SQL Server Object Explorer,您将看到数据库的创建与我们在DBContext类中使用的名称相同。
让我们扩展该数据库,您将看到它有一个表,其中包含我们在Employee模型类中拥有的所有字段。
要查看此表中的数据,请右键单击"Employees"表,然后选择"View Data"。
您会看到我们目前没有记录。
让我们直接在数据库中添加一些记录,如以下屏幕截图所示。
刷新浏览器,您将看到数据现在已从数据库更新到视图。
通过点击"Create New"链接,从浏览器中添加一条记录,它将显示创建视图。
让我们在以下字段中添加一些数据。
单击创建按钮,它将更新索引视图以及将此新记录添加到数据库。
现在,我们去SQL Server对象资源管理器并刷新数据库,右键单击雇员表,然后选择查看数据菜单选项,您将看到该记录已添加到数据库中。
参考链接
https://www.learnfk.com/asp.net_mvc/asp.net-mvc-databases.html