ADO.NET Entity入门的程序 #4(自己动手写)--数据新增、删除、修改(ObkectContext的 .SaveChange()方法)
http://www.dotblogs.com.tw/mis2000lab/archive/2010/10/27/entity_manual_4_savechange.aspx
当您要阅读这篇文章之前,建议您先看过这系列的相关文章,循序渐进。
(以前发表过的 Entity相关文章)
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #1~#2 (2010-10-27 18:04)
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #3 -- LINQ-to-SQL、EntitySQL、查询产生器方法(Query builder)三种语法 (2010-10-27 18:11)
=============================================================================
资料来源: 微软MSDN网站
ObjectContext.SaveChanges()方法
http://msdn.microsoft.com/zh-tw/library/bb336792.aspx
建立、加入、修改和删除对象 (Entity Framework)
http://msdn.microsoft.com/zh-tw/library/bb738695.aspx
HOW TO:加入、修改和删除对象 (Entity Framework)
http://msdn.microsoft.com/zh-tw/library/bb386870.aspx
微软的范例有提供 C#语法的范例了, 所以我只在此补充 VB范例。
=============================================================================
这三个范例的执行结果都一样,只是采用了三种不同的查询语法而已。
HTML画面上都是空白的,只有一个 Label控件。
其余,纯粹用手写「后置程序代码」
最上方的「NameSpace」都一样喔,我先写在此
Imports System.Data
Imports System.Data.Objects
Imports System.Data.Objects.DataClasses
'==============================
Imports testModel '==自己做的 Entity Model(请用 VS 2008/2010 先做好)
'==============================
后置程序代码如下(VB版)
Protected Sub Page_Load(ByVal sender As Object, ByVale As System.EventArgs) Handles Me.Load
Using u_context As New testEntities
'== 以下是 查询产生器方法(Query builder methods)范例。
Try
''**** 修改 ********************************(start)
''== 以下改用 test实体来承接
Dim SelectTEST As test = u_context.test.Where("it.id = @id", NewObjectParameter("id", 3)).First()
SelectTEST.title = "真珠草萃取物可以治疗肝炎 韩国技转锦鸿(Entity的 .SaveChange()方法)"
SelectTEST.author = "锦鸿生技(Entity的 .SaveChange()方法)"
''**** 修改 ********************************(end)
''**** 删除 ********************************(start)
'Dim DeleteTEST As test = u_context.test.Where("it.id = @id", NewObjectParameter("id", 59)).First()
'u_context.DeleteObject(DeleteTEST)
''**** 删除 ********************************(end)
''**** 新增 ********************************(start)
'Dim AddTEST As New test()
'AddTEST.test_time = "2010/10/27"
'AddTEST.class = "其它"
'AddTEST.title = "HOW TO:加入、修改和删除对象 (Entity Framework)"
'AddTEST.summary = "HOW TO:加入、修改和删除对象 (Entity Framework)"
'AddTEST.article = "HOW TO:加入、修改和删除对象 (Entity Framework)"
'AddTEST.author = "微软MSDN网站"
'u_context.test.AddObject(AddTEST)
''**** 新增 ********************************(end)
Dim affectRows As Integer = u_context.SaveChanges()
'*** 写回数据库里面 ***
Label1.Text = "<font color=red>完成! --- " & affectRows & "</font>"
Catchex As EntityException
Response.Write(ex.ToString())
Catchex1 As DeletedRowInaccessibleException
Response.Write(ex1.ToString())
Catchex2 As UpdateException
Response.Write(ex2.ToString())
End Try
End Using
...................................................................................................................................................
不知道您还记得 ADO.NET的 DataSet吗?
请看本书上集(ASP.NET案例精编)的第 13 / 14章
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
DataSet的两种方法, .Fill()方法用来捞取、查询数据(搭配Select的 T-SQL指令)
而 .Update()方法则是用来写入数据(包含 Insert/ Delete / Update等 T-SQL指令)
不过, Entityframework是透过 EDM(.edmx文件)来管理数据库里面的「真正数据」
最后执行 .SaveChange()方法后才会真正回写数据库。
您有没有发现,他们在「修改」现有资料的时候,都是 ---
先把这笔记录列出来(先查询出来),然后逐一修改每一个字段的「值」。
最后.......一口气回写到数据库里(执行 Update的 SQL指令)
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)