登录
注册
程序人生
个人空间
个人相册
帮助
界面
简洁版本
拼吾爱程序人生
.Net编程
ADO.Net
ADO.NET Entity Framework 体验:持久化
Web
www.pin5i.com
输入您的搜索字词
提交搜索表单
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
其他编程
Java
Ajax
javascript
RegExp
XML
Web Service
C & C++
Ruby
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
1
/ 1 页
1
跳转
页
查看:
591
ADO.NET Entity Framework 体验:持久化
cobra
striver
个人空间
相册
性别:
来自:
拼吾爱
积分:
6811
帖子:
6723
注册:
2007-04-09
2008-08-20 23:39
|
只看楼主
树型
|
收藏
|
小
中
大
复制帖子链接到剪贴板
1F
ADO.NET Entity Framework 体验:持久化
ORM在数据库编程中,充当持久层的作用——持久,将数据持久化到数据库中。通过持久层,可以方便的将我们平时所作的增、删、改操作"固化"到数据库中去。本文将通过一个实例,来看看ADO.NET Entity Framework中如何对数据库进行CRUD操作。
为了便于说明,我们这里选用了极其简单的例子。虽然,实际情况会比这个示例复杂得多,但是,其操作模式是一样的。
一、准备工作
要完成本文的示例,我们需要:
将Visual Studio 2008及.NET Framework 3.5升级到SP1。
点击转到升级地址
。
安装SQL SERVER 2005,VS 2008中自带的EXPRESS版的SQL SERVER应该也可以用。
下载并附加数据库:
点击下载DemoDb
。
创建一个VB Application,注意,目标Framework要设置成3.5版。
完成数据库到实体数据模型的映射。具体方法请参考:《
ADO.NET Entity Framework 试水——掠影
》。
附加数据库后,大家可以顺便查看一下数据库当前的状况。我这边的数据库当前状况如下:
附件:
您所在的用户组无法下载或查看附件
完成映射后,在实体数据模型设计器里看到的情形大致如下:
附件:
您所在的用户组无法下载或查看附件
二、增加实体
目标:
在数据库中插入一行数据,存放一个笔记本信息——品牌:华硕;型号:A8;单价:6500.00;重量:2.2千克。
'''
<summary>
''' Performs insert
'''
</summary>
'''
<remarks></remarks>
Public
Sub
Add()
'Create an ObjectContext
Using
db
As
New
DemoDbEntities()
'Create a new entity
Dim
newLaptop =
New
NotebookStorage
With
_
{.Brand =
"华硕"
, _
.Type =
"A8"
, _
.Price = 6500.0, _
.重量 = 2.2}
'Add entity to entity set
db.AddToNotebookStorage(newLaptop)
'Persist changes
db.SaveChanges()
End
Using
End
Sub
在插入的模式中,我们首先,建立了一个ObjectContext。
在Create a new entity部分,我们创建了一个实体(Entity),实体的名字叫newLaptop,在现实生活中,这对应了一台笔记本电脑。它的实体类(Entity Type)是"NotebookStorage"。这个类规定了它有品牌、型号、单价、重量等属性。因此,我们运用了一个对象初始化器,将给实体的属性赋以具体的值。
在Add entity to entity set部分,我们通过.AddToNotebookStorage方法,将上一步中新建的实体,添加到了实体集(Entity Set)中。
在Persist changes部分,我们通过一个叫SaveChanges()的方法,将数据持久化到了数据库中。编译运行后,如果大家查询一下数据库,就可以看到新增的行了:
附件:
您所在的用户组无法下载或查看附件
三、修改实体
目标:
在数据库中,将所有品牌为"华硕"的笔记本数据行中的值改为"ASUS"。
'''
<summary>
''' Performs Update
'''
</summary>
'''
<remarks></remarks>
Public
Sub
Modify()
'Create an ObjectContext
Using
db
As
New
DemoDbEntities
'Query the entities to modify
Dim
query =
From
asusLaptop
In
db.NotebookStorage _
Where
asusLaptop.Brand =
"华硕"
_
Select
asusLaptop
'Retrieve the entities and modify it
For
Each
asusLaptop
In
query
asusLaptop.Brand =
"ASUS"
Next
'Persist changes
db.SaveChanges()
End
Using
End
Sub
在更新模式中,我们首先创建了一个ObjectContext。
在Query the entities to modify部分,我们通过LinQ to Entity创建了一个查询,查询出全部品牌为"华硕"的实体。
在Retrieve the entities and modify it中,我们通过一个For Each循环,给查询出来的每一个实体的品牌属性赋新的值"ASUS"。
最后,在Persist changes部分,仍然通过SaveChange()方法,将变动持久化到了数据库。
更新后的数据库如情况如下:
附件:
您所在的用户组无法下载或查看附件
四、删除实体
目标:
删除所有品牌中带有"HP"的笔记本的行。
'''
<summary>
''' Performs Delete
'''
</summary>
'''
<remarks></remarks>
Public
Sub
Delete()
'Create an ObjectContext
Using
db
As
New
DemoDbEntities
'Query the entities to delete
Dim
query =
From
hpLaptop
In
db.NotebookStorage _
Where
hpLaptop.Brand.Contains(
"HP"
) _
Select
hpLaptop
'Retrieve the entities and delete it
For
Each
hpLaptop
In
query
db.DeleteObject(hpLaptop)
Next
'Persist changes
db.SaveChanges()
End
Using
End
Sub
在删除模型中,我们第一步做的,仍然是创建一个ObjectContext。
在Query the entities to delete部分中,我们依然跟修改数据一样,通过一个LinQ to Entities把要删除的实体给查询出来。
然后,通过一个For Each循环,把所有查询到的实体删除掉。在SaveChanges()之前,所有针对实体的变动,都不会被保存到数据库中。
为了持久化,我们调用db.SaveChanges(),系统自动把相应的变动持久化到数据库中。
删除了含"HP"的笔记本记录之后的数据库表情况如下:
附件:
您所在的用户组无法下载或查看附件
五、小结
本文主要介绍了ADO.NET Entity Framework中的增、删、改操作。通过这一示例,大家可以看到,利益于ORM,我们所有的增删改操作被Object Service捕获,并通过SaveChanges()方法将其持久化到数据库中,从而摆脱了原先的书写SQL语句、执行SQL语句等复杂的操作。
六、示例代码下载
附件:
您所在的用户组无法下载或查看附件
(文/xiaomi7732 出处/博客园)
感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
您可能对 [ADO.Net] 的这些文章也感兴趣:
用C#Builder建数据库应用程序
ADO.NET基础教程(一)
用C#访问Access数据库
ADO.NET入门(6)
获取数据库中的所有表
ADO.NET 数据库访问之数据分页
ADO.NET Entity Framework(4)ObjectQuery
深入分析ADO.NET中的DataSet对象
DataTable.Select使用小心得
ADO.NET Entity Framework:lazy loading(二)
发送短消息
查看公共资料
查找该会员全部帖子
UID:
1
精华:
10
威望:
38
金钱:
1423.65 拼元
状态:
离线
28688028
<<
上一主题
|
下一主题
>>
1
/ 1 页
1
跳转
页
快速回复帖子
标题
禁用 URL 识别
禁用表情
禁用 Discuz!NT 代码
使用个人签名
default
正在加载表情...
[完成后可按 Ctrl+Enter 无刷新发布]
论坛跳转...
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
其他编程
Java
Eclipse
Spring
EJB
Ajax
ExtJS
Dojo
javascript
jQuery
RegExp
XML
Web Service
C & C++
Ruby
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
管理团队
回收站
下载权限不够?五招教你快速提升权限。。。
我的主题
我的帖子
我的精华
我的空间
我的相册
帖子标题
空间日志
相册标题
作 者
我的主题
我的帖子
我的附件
我的精华
我的空间
我的相册