演练:使用单表继承创建 LINQ to SQL 类(O/R 设计器)

Visual Studio 中的 LINQ to SQL 工具支持通常在关系系统中实现的单表继承。 本演练针对如何:使用 O/R 设计器配置继承主题中提供的一般步骤进行扩展,并提供了一些真实数据来演示 O/R 设计器中继承的使用。

在本演练期间,你将要执行以下任务:

  • 创建一个数据库表,并向其中添加数据。

  • 创建一个 Windows 窗体应用程序。

  • 将 LINQ to SQL 文件添加到项目中。

  • 创建新的实体类。

  • 配置实体类使用继承。

  • 查询继承类。

  • 在 Windows 窗体上显示数据。

创建要从中继承的表

要了解继承的工作原理,请创建一个小的 Person 表,将其用作基类,然后创建一个从该表继承的 Employee 对象。

创建基表以演示继承

  1. 服务器资源管理器数据库资源管理器中,右键单击节点,然后单击添加新表

    注意

    可以使用 Northwind 数据库或其他任何可添加表的数据库。

  2. 在表设计器中,向该表中添加以下列

    列名 数据类型 允许 Null 值
    ID int False
    类型 int True
    名字 nvarchar(200) False
    姓氏 nvarchar(200) False
    管理员 int True
  3. 将 ID 列设置为主键。

  4. 保存该表并将其命名为 Person

向表中添加数据

为了验证对继承的配置是否正确,表对于单表继承中的每个类都需要一些数据。

向表中添加数据。

  1. 在数据视图中打开该表。 (在服务器资源管理器数据库资源管理器中右键单击 Person 表,然后单击显示表数据。)

  2. 将下面的数据复制到表中。 (通过在结果窗格中选择整行,将数据复制并粘贴到表中。)

    ID 类型 名字 姓氏 管理员
    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 窗体应用程序

  1. 在 Visual Studio 的文件菜单中,依次选择新建>项目

  2. 在左侧窗格中展开 Visual C#Visual Basic,然后选择 Windows 桌面

  3. 在中间窗格中,选择 Windows 窗体应用项目类型。

  4. 将项目命名为 InheritanceWalkthrough,然后选择确定

    InheritanceWalkthrough 项目即被创建并添加到解决方案资源管理器中

将 LINQ to SQL 类文件添加到项目

将 LINQ to SQL 文件添加到项目

  1. “项目” 菜单上,单击 “添加新项”

  2. 单击 LINQ to SQL 类模板,然后选择添加

    .dbml 文件将添加到项目中,O/R 设计器会打开

使用 O/R 设计器创建继承

通过将“继承”对象从“工具箱”拖动到设计图面来配置继承

创建继承

  1. 服务器资源管理器数据库资源管理器中,导航到之前创建的 Person 表。

  2. Person 表拖到 O/R 设计器设计图面上。

  3. 将第二个 Person 表上拖到 O/R 设计器上,并将其名称更改为 Employee

  4. 从“Person”对象删除“Manager”属性

  5. 从“Employee”对象删除“Type”、“ID”、“FirstName”和“LastName”属性。 (即删除“Manager”以外的所有属性。

  6. 从“工具箱”的“对象关系设计器”选项卡上,在“Person”和“Employee”对象之间创建“继承”。 为此,请单击“工具箱”中的“继承”项,然后松开鼠标按钮。 接下来,在 O/R 设计器中依次单击 Employee 对象和 Person 对象。 然后继承行上的箭头指向 Person 对象。

  7. 单击设计图面上的“继承”连线

  8. 将“鉴别器属性”属性设置为“Type”

  9. 将“派生类鉴别器值”属性设置为“2”

  10. 将“基类鉴别器值”属性设置为“1”

  11. 将“继承默认值”属性设置为“Person”

  12. 生成项目。

查询继承类并在窗体上显示数据

现在向窗体添加一些代码,用于在对象模型中查询特定的类。

创建一个 LINQ 查询并在窗体上显示结果

  1. 将一个“ListBox”拖动到 Form1 上

  2. 双击窗体以创建 Form1_Load 事件处理程序。

  3. 将以下代码添加到 Form1_Load 事件处理程序中:

    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 的记录)

测试应用程序

  1. F5

  2. 检验是否仅显示了“Type”列值为 2 的记录

  3. 关闭窗体。 (在调试菜单上,单击停止调试。)