您的位置:首页 > 其它

ADO.NET Entity Framework 试水——掠影

2008-08-18 21:46 281 查看
准备工作:

将Visual Studio 2008及.NET Framework 3.5升级到SP1。点击转到升级地址

安装SQL SERVER 2005,VS 2008中自带的EXPRESS版的SQL SERVER应该也可以用。

下载并附加数据库:点击下载DemoDb

创建一个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把数据从实体对象集中查询并输出到了屏幕。

本文中源代码下载

===返回索引===
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: