Evil 域

当Evil遇上先知

导航

ADO.NET Entity Framework 试水——掠影

Posted on 2008-08-18 21:46  Saar  阅读(4639)  评论(3编辑  收藏  举报

 

 

准备工作:

  1. 将Visual Studio 2008及.NET Framework 3.5升级到SP1。点击转到升级地址
  2. 安装SQL SERVER 2005,VS 2008中自带的EXPRESS版的SQL SERVER应该也可以用。
  3. 下载并附加数据库:点击下载DemoDb
  4. 创建一个VB Application,注意,目标Framework要设置成3.5版。

 

查询实例:

 

1. 创建映射

在项目上右击添加新项目,选择新出现的"ADO.NET Entity Data Model",命名为NotebookDb.edmx。

点击"添加"后出现实体数据模型向导。这时,选择"从数据库生成",建立好相应的数据连接之后,在下方给实体数据模型设定一个名称(示例中使用默认名称DemoDbEntities),并且点击"下一步"。

进入选择表的步骤。我们暂且把两个表全部都选上。点击"完成"。

这样,一个看似LinQ to SQL 的实体数据模型设计器就展现在眼前了。

我们看到,两个表对应映射成了两个实体,这两个实体中有两类属性,分别为"Scalar Property"和"Navigation Property";两个实体之间,还形成了一个1对多的关系。如果大家看过一点UML,对这种关系符号一定不会感觉陌生。Visual Studio下方,映射详细信息面板自动开启。当我们选择一个实体时,它自动显示实体与表的列之间的映射关系。列到属性,数据库类型到.NET类型……一目了然。

 

2. 根据需要,修改映射

由于实体数据模型存在于客户端,故其修改不会对数据库造成影响。也就是说,我们可以根据应用程序的需要,修改映射关系,并且这种修改不会影响数据库。这一特点,会在同一企业不同领域使用共享的数据存储,不同的领域模型的情况下带来受益。我们来试着删除Weight的映射。实在是超级简单啊,在实体上右击,点击"删除",观察一下映射详细信息面板:Weight已经被删除了。

3. 使用LINQ to Entity查询并输出结果

最后,我们来试试怎么通过LinQ to Entity把查询结果输出。无论如何,LinQ就是LinQ,LinQ查询就脱离不了我们在VB 9.0新特性之LINQ(一)中提到的那三步:

  • 确立数据源
  • 创建查询
  • 执行查询

我们的代码也对应着这三步进行:

Sub Main()

    'Create Entity Set

    Dim db As New DemoDbEntities()

 

    'Create Query

    Dim query = From aLaptop In db.NotebookStorage _

                Select aLaptop

 

    'Execute Query

    For Each aLaptop In query

        Console.WriteLine(aLaptop.Brand & vbTab & aLaptop.Type & vbTab & aLaptop.Price)

    Next

End Sub

编译。如果大家使用下载的数据库,就会发现,编译无法通过,有一个错误:

Error 3023: Problem in Mapping Fragment starting at line 92: Column NotebookStorage.Weight in table NotebookStorage must be mapped: It has no default value and is not nullable.

    E:\...\EFWalkThrough\NotebookDb.edmx    93    15    EFWalkThrough

呵呵,看来,刚才删除的列是不被允许了,因为数据库中有一个约束,要求必须有此列。我们要把它添加回去。打开实体数据模型设计器,右击,添加一个"Scalar Property"并给它取个名称:"重量",设置对应的"Nullable"属性为"False"。

然后,在"映射详细信息"面板中,通过下拉选择框,把表中的Weight列映射到刚才新建的"重量"属性。

顺手修改一下输出语句:

Console.WriteLine(aLaptop.Brand & vbTab & aLaptop.Type & vbTab & aLaptop.Price & vbTab & aLaptop.重量)

好,F5,编译运行。输出结果如下:

大家注意到了输出结果中,重量全部都变成了2?呵呵,看一下重量的数据类型便知道其中缘故了吧。^_^

 

小结:

在本文中,我们Step by step的创建一个数据实体模型;然后,对实体模型中的映射关系作了修改(删除映射、添加映射);我们还使用LinQ to Entity把数据从实体对象集中查询并输出到了屏幕。

 

本文中源代码下载

 

===返回索引===