演练:使用单表继承创建 LINQ to SQL 类(O/R 设计器)
对象关系设计器(O/R 设计器)支持通常在关系系统中实现的单表继承。 此演练对如何:使用 O/R 设计器配置继承主题中提供的通用步骤进行了扩展,提供一些真实数据演示在 O/R 设计器中对继承的使用。
在本演练中,您将要执行以下任务:
创建一个数据库表,并向其中添加数据。
创建一个 Windows 窗体应用程序。
将一个 LINQ to SQL 文件添加到项目。
创建新的实体类。
配置实体类使用继承。
查询继承类。
在 Windows 窗体上显示数据。
创建要从中继承的表
为了解继承的工作方式,您将创建一个小的 Person 表用作基类,然后创建一个从该表继承的 Employee 对象。
创建基表以演示继承
在**“服务器资源管理器”/“数据库资源管理器”中,右击“表”节点,然后单击“添加新表”**。
提示
可以使用 Northwind 数据库或其他任何可添加表的数据库。
在表设计器中,向该表中添加以下列:
列名
数据类型
允许为 Null
ID
int
False
Type
int
True
FirstName
nvarchar(200)
False
LastName
nvarchar(200)
False
Manager
int
True
将 ID 列设置为主键。
保存该表并将其命名为 Person。
向表中添加数据
为了验证对继承的配置是否正确,表对于单表继承中的每个类都需要一些数据。
向表中添加数据。
在数据视图中打开该表。 (在**“服务器资源管理器”/“数据库资源管理器”中右击“Person”表,然后单击“显示表数据”**。)
将下面的数据复制到表中。 (您可以在“结果”窗格中选择整行,复制数据并将数据粘贴到表中。)
ID
Type
FirstName
LastName
Manager
1
1
Anne
Wallace
NULL
2
1
Carlos
Grilo
NULL
3
1
Yael
Peled
NULL
4
2
Gatis
Ozolins
1
5
2
Andreas
Hauser
1
6
2
Tiffany
Phuvasate
1
7
2
Alexey
Orekhov
2
8
2
Michał
Poliszkiewicz
2
9
2
Tai
Yee
2
10
2
Fabricio
Noriega
3
11
2
Mindy
Martin
3
12
2
Ken
Kwok
3
创建新项目
至此,表已经创建完毕,下面创建一个新项目演示对继承的配置。
创建新的 Windows 应用程序
从**“文件”**菜单创建一个新的项目。
将项目命名为 InheritanceWalkthrough。
提示
Visual Basic 和 C# 项目中都支持 O/R 设计器。 请使用这两种语言之一创建新项目。
单击**“Windows 窗体应用程序”模板,然后单击“确定”**。 有关更多信息,请参见 创建基于 Windows 的应用程序。
InheritanceWalkthrough 项目即被创建并添加到**“解决方案资源管理器”**中。
将 LINQ to SQL 类文件添加到项目
将 LINQ to SQL 文件添加到项目
在**“项目”菜单上单击“添加新项”**。
单击**“LINQ to SQL 类”模板,然后单击“添加”**。
.dbml 文件即添加到项目,O/R 设计器打开。
使用 O/R 设计器创建继承
通过将**“继承”对象从“工具箱”**拖动到设计图面来配置继承。
创建继承
在**“服务器资源管理器”/“数据库资源管理器”中,定位到之前创建的“Person”**表。
将**“Person”**表拖动到 O/R 设计器设计图面上。
将另一个**“Person”**表拖动到 O/R 设计器并将其名称更改为“Employee”。
从**“Person”对象删除“Manager”**属性。
从**“Employee”对象删除“Type”、“ID”、“FirstName”和“LastName”属性。 (即删除“Manager”**以外的所有属性。)
从**“工具箱”的“对象关系设计器”选项卡上,在“Person”和“Employee”对象之间创建“继承”。 为此,请单击“工具箱”中的“继承”项,然后松开鼠标按钮。 接下来在 O/R 设计器中依次单击“Employee”对象和“Person”对象。 继承连线上的箭头将指向“Person”**对象。
单击设计图面上的**“继承”**连线。
将**“鉴别器属性”属性设置为“Type”**。
将**“派生类鉴别器值”属性设置为“2”**。
将**“基类鉴别器值”属性设置为“1”**。
将**“继承默认值”属性设置为“Person”**。
生成项目。
查询继承类并在窗体上显示数据
您将向窗体中添加一些代码,用于在对象模型中查询特定的类。
创建一个 LINQ 查询并在窗体上显示结果
将一个**“ListBox”**拖动到 Form1 上。
双击窗体以创建 Form1_Load 事件处理程序。
将下面的代码添加到 Form1_Load 事件处理程序中:
Dim dc As New DataClasses1DataContext Dim results = From emp In dc.Persons _ Where TypeOf emp Is Employee _ Select emp For Each Emp As Employee In results ListBox1.Items.Add(Emp.LastName) Next
NorthwindDataContext dc = new DataClasses1DataContext(); var results = from emp in dc.Persons where emp is Employee select emp; foreach(Employee Emp in results) { listBox1.Items.Add(Emp.LastName) }
测试应用程序
运行应用程序并检验列表框中显示的记录是否全为员工(“Type”列值为 2 的记录)。
测试应用程序
按 F5。
检验是否仅显示了“Type”列值为 2 的记录。
关闭窗体。 (在**“调试”菜单上单击“停止调试”**。)
请参见
任务
如何:向项目中添加 LINQ to SQL 类(O/R 设计器)
如何:使用 Visual Basic 或 C# 生成对象模型 (LINQ to SQL)