一步一步学Linq to sql(三):增删查改
前言
今天主要是来学习一下,通过Linq如何进行数据库的操作,增加、删除、修改。准备工作,先是建立了一个Asp.Net Mvc 3.0的Web项目,
然后建立一个数据库,表
USE [YQBlog] GO CREATE TABLE [dbo].[tbGuestBook]( [ID] [uniqueidentifier] NOT NULL primary key, [UserName] [varchar](50) NOT NULL, [PostTime] [datetime] NOT NULL, [Message] [varchar](400) NULL, [IsRequired] [bit] NOT NULL, [Reply] [varchar](400) NULL
)
生成实体类
右键点击网站项目,选择添加新项,然后选择“Linq to sql Classes”,命名为GuestBook。然后打开App_Code里面的GuestBook.dbml。设计视图上的文字提示你可以从服务器资源管理器或者攻击箱拖动项到设计界面上来创建实体类。
那么,我们就在服务器资源管理器中创建一个指向GuestBook数据库的数据连接,然后把tbGuestBook表拖动到GuestBook.dbml的设计视图上,按CTRL+S保存。打开GuestBook.designer.cs可以发现系统自动创建了GuestBook数据库中tbGuestBook表的映射。记得主键的设置哦。
首页加载列表
首先为了简单,在HomeController中建立一个全局变量
GuestBookDataContext ctx = new GuestBookDataContext(ConfigurationManager.ConnectionStrings["YQBlogConnectionString"].ConnectionString);
那么关于加载列表的后台代码如下
public ActionResult Index() { ViewBag.Message = "欢迎使用 ASP.NET MVC!"; List<tbGuestBook> list = (from gb in ctx.tbGuestBook orderby gb.PostTime descending select gb).ToList(); return View("Index",list); }
再来看一下列表视图代码
@{ ViewBag.Title = "主页"; } @using MvcOperation; @model List<tbGuestBook> <h2>@ViewBag.Message</h2> <p> 若要了解有关 ASP.NET MVC 的更多信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC 网站">http://asp.net/mvc</a>。 </p> <div> <p>@Html.ActionLink("添加", "AddBook", "Home")</p> </div> <div> <table> <tr> <th>姓名</th> <th>消息</th> <th>发表时间</th> <th>是否需要回复</th> <th>操作</th> </tr> @{ foreach(tbGuestBook Book in Model) { <tr> <td>@Book.UserName</td> <td>@Book.Message</td> <td>@Book.PostTime</td> @if(Book.IsRequired==true) { <td>是</td> } else { <td>否</td> } <td>@Html.ActionLink("删除", "DelBook", "Home", new { id=Book.ID},null) @Html.ActionLink("修改", "UpdateBook", "Home", new { id=Book.ID},null)</td> </tr> } } </table> </div>
看列表就这样展示出来了哦。
添加
看上面截图中有一个操作一栏,删除和修改。
public ActionResult SaveBook(tbGuestBook tb) { tb.ID = Guid.NewGuid(); tb.IsRequired = false; tb.PostTime = DateTime.Now; ctx.tbGuestBook.InsertOnSubmit(tb); ctx.SubmitChanges(); return Index(); }
添加保存时的代码,简单赋值,通过Linq专有方法即可提交到数据库中哦。
再来看一下添加的视图的代码
<h2>AddBook</h2> <div> @using(Html.BeginForm("SaveBook","Home",FormMethod.Post)) { <table> <tr> <td>@Html.Label("姓名")</td> <td>@Html.TextBoxFor(c=>c.UserName,new { @style = "width:300px;"})</td> </tr> <tr> <td>@Html.Label("留言")</td> <td>@Html.TextAreaFor(c=>c.Message, new { @style = "width:300px;height:50px;" })</td> </tr> <tr> <td>@Html.Label("是否需要回复")</td> <td>是 @Html.RadioButtonFor(c=>c.IsRequired, 1, true) 否 @Html.RadioButtonFor(c => c.IsRequired, 0, false)</td> </tr> <tr> <td> <input type="submit" value="添加" /> </td> <td> <input type="button" value="返回" /> </td> </tr> </table> @Html.HiddenFor(c=>c.ID) } </div>
当然这顺便也是修改的视图代码了哦
修改
public ActionResult UpdateBook(string id) { tbGuestBook gb = ctx.tbGuestBook.Single(b => b.ID == new Guid(id)); return View("AddBook",gb); }
点击列表修改时,通过传递的ID进行查找,然后展示到AddBook视图中进行绑定数据,就可以修改了。
public ActionResult SaveBook(tbGuestBook tb) { tbGuestBook gb = null; if (tb.ID.ToString() != "00000000-0000-0000-0000-000000000000") { gb = ctx.tbGuestBook.Single(b => b.ID == new Guid(tb.ID.ToString())); gb.PostTime = DateTime.Now; gb.UserName = tb.UserName; gb.Message = tb.Message; ctx.SubmitChanges(); return Index(); } else { tb.ID = Guid.NewGuid(); tb.IsRequired = false; tb.PostTime = DateTime.Now; ctx.tbGuestBook.InsertOnSubmit(tb); ctx.SubmitChanges(); } return Index(); }
这就是添加和修改的保存代码
删除
public ActionResult DelBook(string id) { tbGuestBook gb = ctx.tbGuestBook.Single(b => b.ID == new Guid(id)); ctx.tbGuestBook.DeleteOnSubmit(gb); ctx.SubmitChanges(); return Index(); }
总结
简单的实例代码,就是这样的,自己感觉表面的还是很简单的。