VS2010,MVC2与EF(Entity Framework)实现增删改的实例

这是学习MVC2和EF访问数据库后的第一个练习实例。实现的是对主题图片的增、删、改及显示的过程,下面是实现步骤和代码。

  1:先创建一个mvc工程,打开VS2010,在File->New->Project...     在Visual C#下选中 ASP.NET MVC 2 Web Application  在对话框的Name栏目改名为ThemeMVC,存放目录自己可选。确定后一个带有模板的MVC框架就已经创建好了。

  2:创建数据库,在Solution Explorer 栏目 ThemeMVC项目下的App_Data栏右击,选Add->New Item... 下的 SQL Server Datebase 改名字为ThemeDB 然后点击Add按钮,所添加的数据库ThemeDB就出现在App_Data下,双击ThemeDB,出现Server Explorer 框,在ThemeDB下的Tables 右击Create Table 创建一个Themes1的表,表的内容如图所示:

.

  3:用EF关联所创建的数据库,进行数据映射。 在ThemeMVC项目上右击 Add->New Item.. 选ADO.NET Entity Data Model 改name 为ThemeModel.edmx 点Add添加。出现对话框choose model content,选generate from database 然后点击next,在与哪个数据库连接的对话框中选中ThemeDB.sdf数据库,在Web.Config 里面保存连接名为ThemeDBEntities1,然后点击Next,在这个对话框中选中要作出映射的数据库表,将Tables的Theme1表选中,然后finish结束。 这时在ThemeMVC项目下面多了一个ThemeModel.edmx文件,在ThemeModel.Designer.cs文件中默认生成了实体容器ThemeDBEntities和实体类Themes,

双击ThemeModel.edmx文件,所映射的实体属性如图所示

 

其中需要注意的是,实体类名默认是与数据库表名相同,我更改了Themes1为Themes。对应的改Name为Themes。Entity Set Name 为实体集的名称,一个实体集含有多个实体类,但是此实例中只有一张数据表。

其中映射表为下图所示:

4. 代码实现。

 根据mvc的特性,在Controller下的HomeController页,先写一个构造函数,初始化实体容器实例。

 ThemeDBEntities ThemeContext;    
        public HomeController()
        {
            ThemeContext = new ThemeDBEntities();
        }

第一个页面,即启动页。从Global.asax.cs文件中可以改写启动也面。 默认为Home\Index。

代码
1 public class MvcApplication : System.Web.HttpApplication
2 {
3 public static void RegisterRoutes(RouteCollection routes)
4 {
5 routes.IgnoreRoute( " {resource}.axd/{*pathInfo} " );
6
7 routes.MapRoute(
8 " Default " , // Route name
9   " {controller}/{action}/{id} " , // URL with parameters
10   new { controller = " Home " , action = " Index " , id = UrlParameter.Optional } // Parameter defaults
11   );
12
13 }
14
15 protected void Application_Start()
16 {
17 AppDomain.CurrentDomain.SetData( " SQLServerCompactEditionUnderWebHosting " , true );
18
19 AreaRegistration.RegisterAllAreas();
20
21 RegisterRoutes(RouteTable.Routes);
22 }
23 }

 添加Index.aspx页面。 

代码
1 public ActionResult Index()
2 {
3 ViewData.Model = ThemeContext.Themes.ToList(); // 将实体类的记录值转变为强类型
4   ViewData[ " Path " ] = ThemeContext.Themes.First().Theme_Path; // 默认显示的图片路径为第一条记录的路径
5   return View( " Index " );
6 }

 在Index()方法上右击,选Add View... 弹出的对话框如图,add添加即可,页面就存在于目录下Views->Home->Index.aspx  (其他方法的页面也用此方法添加即可)

 

 Index.aspx页面的代码。 

代码
1 <% @ Page Language = " C# " MasterPageFile = " ~/Views/Shared/Site.Master " Inherits = " System.Web.Mvc.ViewPage " %>
2
3   < asp:Content ID = " Content1 " ContentPlaceHolderID = " TitleContent " runat = " server " >
4 Home Page
5   </ asp:Content >
6   < asp:Content ID = " Content2 " ContentPlaceHolderID = " MainContent " runat = " server " >
7 < center >
8 < h2 >
9 Theme 数据操作 </ h2 >
10 </ center >
11 < table border = " 1 " width = " 100% " cellspacing = " 20pt " style = " border-color: Gray " >
12 < tr >
13 < th >
14 主题编号
15 </ th >
16 < th >
17 主题名
18 </ th >
19 < th >
20 主题存放路径
21 </ th >
22 < th >
23 主题元素备注
24 </ th >
25 < th >
26 主题应用IP
27 </ th >
28 < th >
29 </ th >
30 < th >
31 </ th >
32 < th >
33 操作
34 </ th >
35 </ tr >
36 <% foreach (var m in ViewData.Model as List < ThemeMVC.Models.Themes > )
37 { %>
38 < tr >
39 < td >
40 <%= m.Theme_ID %>
41 </ td >
42 < td >
43 <%= m.Theme_Name %>
44 </ td >
45 < td >
46 <%= m.Theme_Path %>
47 </ td >
48 < td >
49 <%= m.Theme_Note %>
50 </ td >
51 < td >
52 <%= m.Theme_IP %>
53 </ td >
54 < td >
55 <%= Html.ActionLink( " 编辑 " , " Edit " , new {ID = m.Theme_ID}) %>
56 </ td >
57 < td >
58 <%= Html.ActionLink( " 删除 " , " Delete " , new {ID = m.Theme_ID}) %>
59 </ td >
60 < td >
61 <%= Html.ActionLink( " 显示图片 " , " Show " , new {ID = m.Theme_ID}) %>
62 </ td >
63 </ tr >
64 < tr >
65 </ tr >
66 <% } %>
67 < tr >
68 </ tr >
69 </ table >
70 < p style = " text-align: center " >
71 <%= Html.ActionLink( " 添加 " , " Add " ) %></ p >
72 < img width = " 100% " src = ' <%=ViewData["Path"] %> ' alt = " \image\A.jpg " height = " 200 " />
73 </ asp:Content >

Edit.aspx页面的html代码

代码
1 < asp:Content ID = " Content1 " ContentPlaceHolderID = " TitleContent " runat = " server " >
2 Edit
3   </ asp:Content >
4
5   < asp:Content ID = " Content2 " ContentPlaceHolderID = " MainContent " runat = " server " >
6   < script type = " text/javascript " >
7 function firm() {
8 var result = confirm( " 确定修改数据! " );
9 if (result == false ) {
10 return false ;
11 }
12 else return true ;
13 }
14
15   </ script >
16   < form id = " form1 " runat = ' server ' method = " post " >
17 < h2 > Edit </ h2 >
18 <%= Html.Hidden( " Theme_ID " ) %>
19 Theme_Name: <%= Model.Theme_Name %>< br />< hr />
20 <%= Html.TextBox( " Theme_Name " ) %>< br />< hr />
21 Theme_Path: <%= Model.Theme_Path %>< br />< hr />
22 <%= Html.TextBox( " Theme_Path " ) %>< br />< hr />
23 Theme_Note: <%= Model.Theme_Note %>< br />< hr />
24 <%= Html.TextBox( " Theme_Note " ) %>< br />< hr />
25 Theme_IP: <%= Model.Theme_IP %>< br />< hr />
26 <%= Html.TextBox( " Theme_IP " ) %>< br />< hr />
27 < input type = " submit " value = " Edit " runat = " server " onclick = " return firm(); " ></ form >
28 </ asp:Content >

HomeController页面下的Edit方法:

1 public ActionResult Edit( int ID)
2 {
3 var ThemeEdit = ThemeContext.Themes.First(m => m.Theme_ID == ID);
4 return View(ThemeEdit);
5 }
代码
1 [AcceptVerbs(HttpVerbs.Post)] // 属性说明: 在Edit.aspx页面提交post后跳转到此方法
2   public ActionResult Edit( int Theme_ID, FormCollection form) // FormCollection集合为Edit页面post提交的所有参数集合
3   {
4 Themes ThemeEdit = ThemeContext.Themes.First(m => m.Theme_ID == Theme_ID);
5 try
6 {
7 UpdateModel(ThemeEdit);
8 ThemeContext.SaveChanges();
9 return RedirectToAction( " Page_Load " , new { ThemeEdit.Theme_ID });
10 }
11 catch (Exception e)
12 {
13 ModelState.AddModelError( " ThemeEdit.Theme_ID " ,e.Message);
14 }
15 return View( " Index " );
16 }

Add.aspx页面的html代码:

代码
1 <%--< asp:Content ID = " Content1 " ContentPlaceHolderID = " TitleContent " runat = " server " >
2 Add
3   </ asp:Content >--%>
4
5   < asp:Content ID = " Content2 " ContentPlaceHolderID = " MainContent " runat = " server " >
6
7 < h2 > Add </ h2 >
8 < form id = " form2 " runat = " server " method = " post " >
9 Theme_Name: <%= Html.TextBox( " Theme_Name " ) %>< hr />
10 Theme_Path: <%= Html.TextBox( " Theme_Path " ) %>< hr />
11 Theme_Note: <%= Html.TextBox( " Theme_Note " ) %>< hr />
12 Theme_IP: <%= Html.TextBox( " Theme_IP " ) %>< hr />
13 < input type = " submit " value = " Add " />
14 </ form >
15
16   </ asp:Content >

在HomeController下的Add方法。

1 public ActionResult Add()
2 {
3 return View(); // 默认为View("Add")
4   }
代码
1 [AcceptVerbs(HttpVerbs.Post)]
2 public ActionResult Add(FormCollection form)
3 {
4 Themes th = new Themes();
5 ObjectQuery < int > abq = new ObjectQuery < int > ( " select value Max(it.Theme_ID) from Themes as it " , ThemeContext);
6 if (abq.Sum() == 0 )
7 {
8 th.Theme_ID = 1 ;
9 }
10 else
11 {
12 th.Theme_ID = abq.Max() + 1 ;
13 }
14
15 UpdateModel(th);
16 if (ModelState.IsValid)
17 {
18 ThemeContext.AddToThemes(th);
19 ThemeContext.SaveChanges();
20 return RedirectToAction( " Page_Load " , new {th.Theme_ID });
21 }
22 return View(abq);
23 }

 在Index页面的Delete方法:

代码
1 public ActionResult Delete( int ID)
2 {
3 var ThemeDelete = ThemeContext.Themes.First(m => m.Theme_ID == ID);
4 ThemeContext.DeleteObject(ThemeDelete);
5 if (ModelState.IsValid)
6 {
7 ThemeContext.SaveChanges();
8 return RedirectToAction( " Index " );
9 }
10 else
11 return View(ThemeDelete);
12 }

在Index页面点击显示图片按钮时用到的show方法

代码
1 public ActionResult Show( int ID)
2 {
3 var ThemeShow = ThemeContext.Themes.First(m => m.Theme_ID == ID);
4 ViewData[ " Path " ] = ThemeShow.Theme_Path;
5 return Page_Load(ID);
6 }
代码
1 static int Num;
2
3 public ActionResult Page_Load( int Theme_ID)
4 {
5 ViewData.Model = ThemeContext.Themes.ToList();
6 ViewData[ " Path " ] = ThemeContext.Themes.First(m => m.Theme_ID == Theme_ID).Theme_Path;
7 return View( " Index " );
8 }

 以上为该练习涉及到的所有代码,实现效果如下。

主页面图:

Add页面图: 

Edit页面图:

到此已经完成了实例练习。

 源码下载地址:http://files.cnblogs.com/Joans/ThemeMVC.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值