技术开发 频道

实战.NET MVC3及Entitiy Framwork框架

  【IT168 技术】上一篇文章中,我们初步学习了微软的新的ORM开发框架Entity Framwork中的codefirst的开发方法。在本文中,将继续结合微软最新的ASP.NET MVC3框架以及Entity Framwork框架,开发一个简单的增删改查程序。本文读者对象为有一定ASP.NET MVC3基础及阅读过上一篇Entity Framwork教程的用户。

  步骤1:打开VS.NET 2010,新建立一个语言为C#的,ASP.NET MVC3架构的WEB应用工程,如下图:

实战.NET MVC3及Entitiy Framwork框架

  在点OK后,系统会提示使用视图的引擎和是否使用HTML5,这里我们选择都使用,如下图:

实战.NET MVC3及Entitiy Framwork框架

  步骤2:这时,我们可以通过使用微软的一个方便管理扩展及DLL的工具NuGet去获得Entity Framwork框架(当然也可以到微软的主页上去下载),关于NuGet,可以参考其网站:http://nuget.org/。我们这里到打开Library Package Manager –> Manage Nuget Package Manager,输入搜索Entity Framwork,即可下载该框架,如下图:

实战.NET MVC3及Entitiy Framwork框架

  当选择并点安装后,会发现在工程项目中,已经新增了相关的框架类库,如下图:

实战.NET MVC3及Entitiy Framwork框架

  步骤3:现在我们建立数据库表,将表命名为customers,建表脚本如下:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customer](
[CustomerId] [
int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](
50) NULL,
[LastName] [nvarchar](
50) NULL,
[Address] [nvarchar](
256) NULL,
[City] [nvarchar](
50) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[CustomerId] ASC
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

  步骤4:建立Customer实体类,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace CodeSimplified.Models
{
public class Customer
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
}
}

  接下来,我们还需要建立一个类MyDataContext,它继承了EF框架中的工具类DbContext,在这个MyDataContext类中,我们重写了其中的OnModelCreating方法,代码如下:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db;
namespace CodeSimplified.Models
{
public class MyDataContext:DbContext
{
public DbSet<Customer> Customer { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove
<PluralizingTableNameConvention>();
}
}
}

  因为EF框架中,默认是存在规则,将实体类中的POJO文件对应生成数据库中的表的,在命名上,假如比如实体类名为Product,它会智能映射成Products的表,加了个"s",然而,Category的实体类却映射成了Categories,因此我们可以在OnModelCreating中去掉EF内置的命名规则,即添加语句:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

  步骤5:添加Controller

  现在,我们要添加控制层了,在项目文件中添加controller文件夹,增加一个Controller文件,命名为CustomerController,如下图:

实战.NET MVC3及Entitiy Framwork框架

  系统会生成如下的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace CodeSimplified.Controllers
{
public class CustomerController : Controller
{
//
// GET: /Customer/
public ActionResult Index()
{
return View();
}
//
// GET: /Customer/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /Customer/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Customer/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Customer/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Customer/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Customer/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /Customer/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}

  现在我们开始一步步修改各部分代码,以适应我们的需求。

  步骤6:我们先行修改的是index()方法,以显示用户列表,修改index()部分代码如下:

public ActionResult Index()
{
using (var databaseContext=new Models.MyDataContext())
{
return View(databaseContext.Customer.ToList());
}
}

  在index()方法中,我们调用了之前建立的MyDataContext()工具类,其中、MyDataContext负责读取数据库customer表中的数据,而在控制层中databaseContext.Customer.ToList()则表示把返回的数据转型为适合前端展示的LIST集合列表数据(可以简单这样进行理解)。接下来我们可以建立前端视图层view了。

  步骤7:在建立view层时,我们在vs.net 2010中,只需要鼠标对着index(),右键后,在弹出的菜单中选择“增加视图”,即可弹出如下图的增加视图窗口:

实战.NET MVC3及Entitiy Framwork框架

  按上图设置完毕后,运行我们的WEB工程,即可看到如下图的效果:

实战.NET MVC3及Entitiy Framwork框架

  步骤8:接下来,我们学习如何新建立一个用户。首先,我们依然用鼠标在Create()方法上右键,在弹出的菜单中选择新增view,弹出如下的界面,按如下图设置,注意这里我们在Scaffold 脚手架模版中,选择的是使用Create模版。

实战.NET MVC3及Entitiy Framwork框架

  步骤9:修改create()的方法代码如下:

[HttpPost]
public ActionResult Create(Models.Customer customer)
{
try
{
using (var databaseContext = new Models.MyDataContext())
{
databaseContext.Customer.Add(customer);
databaseContext.SaveChanges();
}

return RedirectToAction("Index");
}
catch
{
return View();
}
}

  同样,首先跟之前的列表方法中一样,调用Models.MyDataContext()方法,然后调用其中 databaseContext.Customer的Add方法,其中的参数为customer对象实例,最后调用SaveChanges方法,即可将其保存到数据库。

  步骤10:接下来,我们为应用增加编辑功能。同样,在edit()方法中鼠标右键,在弹出的菜单中选择增加视图,出现如下界面:

实战.NET MVC3及Entitiy Framwork框架

  同样,这里记得选择Scaffold脚手架模版为Edit,然后修改edit代码如下:

public ActionResult Edit(int id)
{
using (var databaseContext = new Models.MyDataContext())
{
return View(databaseContext.Customer.Find(id));
}
}

  这里首先是根据前端列表用户选择的id,在数据库中根据id找出相应的customer实体类,然后再传递给前端页面视图。

  接下来,就是当用户编辑好数据后,提交后的更新处理部分,代码如下:

[HttpPost]
public ActionResult Edit(int id, Models.Customer customer)
{
try
{
using (var databaseContext = new Models.MyDataContext())
{
databaseContext.Entry(customer).State
= System.Data.EntityState.Modified;
databaseContext.SaveChanges();
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}

  其中,在修改更新数据时,只需要设置databaseContext.Entry(customer)的state状态为System.Data.EntityState.Modified,即表示数据是已修改的,最后在用savechanges方法保存到数据库。

  步骤11:最后我们来看删除数据。同样,我们先要取得要删除的数据,然后再删除。跟上面说的步骤类似,增加一个delete的脚手架视图,如下图:

实战.NET MVC3及Entitiy Framwork框架

  修改控制层的代码如下:

// GET: /Customer/Delete/5
public ActionResult Delete(int id)
{
using (var databaseContext = new Models.MyDataContext())
{
return View(databaseContext.Customer.Find(id));
}
}
//
// POST: /Customer/Delete/5
[HttpPost]
public ActionResult Delete(int id,Models.Customer customer)
{
try
{
using (var databaseContext = new Models.MyDataContext())
{
databaseContext.Entry(databaseContext.Customer.Find(id)).State
= System.Data.EntityState.Deleted;
databaseContext.SaveChanges();
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}

  在方法Delete(int id)中,我们获得了数据库中要删除的数据记录,而真正删除的方法是在Delete(int id,Models.Customer customer)中,同样也是设置state状态后,再用SaveChanges()方法保存。

  步骤12:此外,我们为了能看到每条信息的具体记录,可以创建detail详细信息页,而ASP.NET MVC3也为我们准备了对应的脚手架,因此可以新增一个视图,如下:

实战.NET MVC3及Entitiy Framwork框架

  并加入如下代码即可实现查看记录详细信息的功能:

public ActionResult Details(int id)
{
using (var databaseContext = new Models.MyDataContext())
{
return View(databaseContext.Customer.Find(id));
}
}

  小 结:

  本文通过简单的例子,揭示了如何使用ASP.NET MVC3的强大功能,结合微软的Entity Framework 这一新出的ORM框架去构建基本数据库应用,读者可以通过查看Entity Framework文档,了解更多用法,可以跟ASP.NET MVC 3配合,大大提高了开发效率。

0
相关文章