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语句等复杂的操作。
六、示例代码下载
点击下载。
Little knowledge is dangerous.