65.9K
CodeProject 正在变化。 阅读更多。
Home

Entity Framework 绝对初学者入门

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (237投票s)

2012 年 4 月 9 日

CPOL

5分钟阅读

viewsIcon

1039187

downloadIcon

23552

为绝对初学者介绍 Entity Framework。

引言

本文向绝对初学者介绍 Entity Framework。本文面向主要使用 ADO.NET 编写数据访问层(Data Access Layer)的开发人员。许多有经验的开发人员会觉得本文非常基础,但由于本文是从初学者的角度编写的,我尽量保持内容简单。

背景

ADO.NET 是一个非常强大的数据访问框架。ADO.NET 已经存在多年,有大量的系统运行在 ADO.NET 之上。对于完全不了解 ORM(对象关系映射)概念的开发人员,他们可能会问:“Entity Framework 是什么?使用它有什么好处?它是否是 ADO.NET 的替代品?”

那么,为了回答第一个关于 Entity Framework 是什么的问题,Entity Framework 是一个对象关系映射器(ORM)。它基本上根据数据库表生成业务对象和实体,并提供了一个机制来:

  1. 执行基本的 CRUD(创建、读取、更新、删除)操作。
  2. 轻松管理“一对一”、“一对多”和“多对多”关系。
  3. 实体之间拥有继承关系的能力。

以及回答第二个问题,其好处包括:

  1. 我们可以用更高级的语言编写所有数据访问逻辑。
  2. 可以使用实体之间的关系以更好的方式表示概念模型。
  3. 由于所有数据访问逻辑都存在于更高级别,因此可以以较小的开销替换底层数据存储。

最后,关于它是否是 ADO.NET 的替代品,答案是“是也不是”。说是,因为开发人员将不再编写 ADO.NET 方法和类来执行数据操作;说不是,因为这个模型实际上是建立在 ADO.NET 之上的,这意味着在这个框架下,我们仍在 HADO.NET。所以,让我们来看看 Entity Framework 的架构(图来自 MSDN)。

Entity framework article image

使用代码

让我们通过执行简单的 CRUD 操作来尝试理解 Entity Framework 提供的易用性。一旦我们看到了代码以及我们能多么轻松高效地完成这些操作,Entity Framework 的好处就会变得相当明显。

创建数据库

让我们创建一个只有一张表的简单数据库。让我们为“联系人”(Contacts)创建一个简单的表,然后我们将在这个表上执行 CRUD 操作。

Entity framework article image

将实体模型添加到网站

数据库准备好后,我们可以将实体模型添加到我们的网站。我们可以通过向网站添加一个 *ADO.NET 实体数据模型* 来做到这一点。

Entity framework article image

一旦我们选择将此数据模型添加到我们的网站,我们将需要选择我们希望用于模型内容的实现方式。

Entity framework article image

这个选择意味着我们可以选择从现有数据库模式生成实体模型,或者我们可以在此处设计实体模型,然后稍后将其连接到数据库。由于我们已经准备好了数据库,我们将使用第一个选项。模型生成后,每个表的实体都会被生成。我们联系人表的生成的实体是

Entity framework article image

此外,还将创建用于执行数据库操作的类。我们只需要知道如何使用这些类来执行数据库操作。

Entity framework article image

插入操作

让我们创建一个简单的页面来执行插入操作。

Entity framework article image

现在,一旦用户选择将值插入数据库,就可以通过使用模型类实体集合的 `AddObject` 方法来执行实际的数据操作。以下代码片段展示了如何执行插入。

Contact con = new Contact();
con.fname = TextBox1.Text;
con.lname = TextBox2.Text;
con.phone = TextBox3.Text;

ContactsDb db = new ContactsDb();
db.Contacts.AddObject(con);
db.SaveChanges();

这将向表中插入一条记录。您可以注意到我们编写的代码来执行插入的简洁性和高效性。

读取所有记录

有时我们需要读取所有记录。假设我们正在创建一个页面,该页面将在单个页面上显示所有联系人信息。

Entity framework article image

我们可以使用模型对象检索实体集合来实现这一点。下面的代码片段将展示如何做到这一点。

ContactsDb db = new ContactsDb();
Repeater1.DataSource = db.Contacts;
Repeater1.DataBind();

选择特定记录

如果我们想从表中选择一条特定记录,我们可以使用模型实体集合上的 `SingleOrDefault` 方法。假设我们希望在单个页面上进行更新/删除记录的功能,那么我们首先需要根据 ID 选择记录,然后更新/删除所选记录。

Entity framework article image

可以这样根据 ID 选择任何特定记录(`Contact`):

int idToupdate = Convert.ToInt32(Request.QueryString["id"].ToString());
ContactsDb db = new ContactsDb();
Contact con = db.Contacts.SingleOrDefault(p => p.id == idToupdate);

此代码执行后,`Contact` 对象将包含所需的值。

更新记录

如果我们想更新一条记录,那么一个简单的更新操作可以这样执行:

int idToupdate = Convert.ToInt32(Request.QueryString["id"].ToString());
ContactsDb db = new ContactsDb();
Contact con = db.Contacts.SingleOrDefault(p =>  p.id == idToupdate);

con.phone = TextBox1.Text;
db.SaveChanges();

此代码执行后,电话号码的值将通过从 `TextBox1` 检索的新值进行更新。

删除记录

如果我们想删除一条特定记录,我们可以使用 `DeleteObject` 函数执行删除操作。以下代码片段演示了这一点:

//delete this contact
int idToupdate = Convert.ToInt32(Request.QueryString["id"].ToString());
ContactsDb db = new ContactsDb();
Contact con = db.Contacts.SingleOrDefault(p => p.id == idToupdate);

db.Contacts.DeleteObject(con);
db.SaveChanges();

现在我们已经使用 Entity Framework 在数据库上执行了基本 CRUD 操作。

关于关系和延迟加载的说明

要理解 Entity Framework,我们需要了解一些东西,例如命名约定、表之间的关系以及实体之间的关系。此外,一旦完全理解了延迟加载的概念,开发人员就可以高效地使用 Entity Framework。

注意:由于这是一篇关于 Entity Framework 的入门文章,我们没有讨论这些内容。也许我们会在另一篇文章中讨论它们。

关注点

Entity Framework 已经使用一段时间了。但仍有许多开发人员才刚开始接触 Entity Framework。本文旨在概述 Entity Framework。这不应被视为完整的教程。此外,编写的代码非常简单,并且有很大的优化空间,但由于这里的想法是理解 Entity Framework,我试图让代码保持简单易读,而不是最优。

注意:要运行解决方案,请在 `web.config` 文件中更改 `ConnectionString` 的数据库路径。

历史

  • 2012 年 4 月 9 日:初稿。
© . All rights reserved.