更新:2007 年 11 月
可以使用对象关系设计器(O/R 设计器)将 LINQ to SQL 类映射到数据库中的表。这些映射的类也称为“实体类”。实体类的属性映射到表的列,您可以将数据绑定到 Windows 窗体上的控件。若要了解有关 LINQ to SQL 的更多信息,请参见在 C# 中使用 LINQ。
先决条件
如果您在安装 Visual C# 速成版时未安装 SQL Server Express Edition,则在继续之前请先安装它。当前 LINQ to SQL 中不支持 SQL Server Compact 3.5 数据库。有关如何获取 SQL Server Express Edition 的信息,请参见如何:安装示例数据库主题中的**“获取 SQL Server Express”**部分。
此外,还必须能够访问 Northwind 示例数据库的 SQL Server 版本。有关如何获取和安装此数据库的信息,请参见如何:安装示例数据库。
打开 O/R 设计器
打开 O/R 设计器
在“文件”菜单上单击“新建项目”。
在“新建项目”对话框中,单击“Windows 窗体应用程序”,将其命名为 LINQToSQLSample,然后单击“确定”。
一个新的 Windows 窗体项目随即打开。
在“项目”菜单上单击“添加新项”。
单击“LINQ to SQL 类”模板,然后在“名称”框中键入“NorthwindSample.dbml”。
单击“添加”。
此时会将一个空的“LINQ to SQL 类”文件 (NorthwindSample.dbml) 添加到项目中,并打开 O/R 设计器。
O/R 设计器 由两个设计图面组成:左侧的实体窗格和右侧的方法窗格区域。实体窗格是显示文件中定义的实体类的主要设计图面。方法窗格是显示映射到已存过程和函数的 DataContext 方法的设计图面。可以通过右击 O/R 设计器,然后单击“隐藏方法窗格”来隐藏方法窗格。在本课中不会使用方法窗格,但您可以在 DataContext 方法(O/R 设计器)中了解有关该窗格的更多信息。
单击主设计图面,并在“属性”窗口中验证其名称是否为 NorthwindSampleDataContext。通过将数据库表从“数据库资源管理器”拖到 O/R 设计器 图面上,可以创建实体类。但是必须先创建到数据库的连接。此过程类似于如何:连接到数据库 (C#) 中描述的过程,不过此处将使用 SQL Server Express 数据库。
连接到 Northwind 示例数据库
在“视图”菜单上指向“其他窗口”,然后单击“数据库资源管理器”。
“数据库资源管理器”随即打开。
单击“连接到数据库”按钮。
“添加连接”对话框随即打开。
在“添加连接”对话框中,确保“数据源”为“Microsoft SQL Server 数据库文件”。
单击“浏览”并选择“Northwind.mdf”数据库。
单击“测试连接”以验证连接是否成功。
单击“确定”关闭“添加连接”对话框。
创建实体类
现在,Northwind 数据库中的表在“数据库资源管理器”中是可见的。可以将这些表从“数据库资源管理器”拖到 O/R 设计器 上。这会自动创建实体类,这些实体类的属性映射到选定表中的列。
创建实体类
在“数据库资源管理器”中,展开“Northwind.mdf”,然后展开“表”。
将“Customers”从“数据库资源管理器”拖到 O/R 设计器图面上。如果系统提示是否将数据文件复制到项目中,请单击“是”。
将创建一个名为 Customer 的实体类。该类的属性与 Customers 表中的列相对应。
说明:
该实体类的名称是 Customer 而不是 Customers。这种重命名行为称为“复数化”。可在“选项”对话框中启用或禁用此行为。有关更多信息,请参见“选项”对话框 (Visual Studio) 和如何:打开和关闭复数形式(O/R 设计器)。
将“Orders”从“数据库资源管理器”拖到 O/R 设计器图面上。
将创建一个名为 Order 的实体类。请注意,Order 类与 Customer 实体类之间存在关系(称为关联)。Order 类的属性与 Orders 表中的列相对应。
现在已创建了实体类,您可以通过运行“数据源配置向导”将这些类添加到“数据源”窗口中。
将实体类作为对象数据源添加到“数据源”窗口中
在“生成”菜单上,单击“生成解决方案”。
在“数据”菜单上单击“显示数据源”。
在“数据源”窗口中,单击“添加新数据源”按钮。
单击“选择数据源类型”页上的“对象”,然后单击“下一步”。
展开“LINQToSQLSample”,然后单击“Customer”类。
说明:
如果“Customer”类不可用,则单击“取消”,生成项目,然后重新运行向导。
单击“完成”以创建数据源并将“Customer”实体类添加到“数据源”窗口。
将 Windows 窗体上的控件绑定到实体类
通过将表或字段从“数据源”窗口拖到 Windows 窗体上,可以将被数据绑定到实体类的控件添加到该窗体中。
添加绑定到实体类的控件
在“解决方案资源管理器”中右击“Form1”,然后单击“视图设计器”。
在“数据源”窗口中,展开“Customer”。
单击“CompanyName”旁边的下拉箭头,然后单击“Label”。
将“CompanyName”拖到窗体上。
将“Orders”从“数据源”窗口拖到 Form1 中。将其放置在“CompanyName”下方。
在“解决方案资源管理器”中右击“Form1”,然后单击“查看代码”。
将下面的代码添加到窗体中 Form 类的顶部,但应将其放在任意特定方法之外。
private NorthwindSampleDataContext northwindSampleDataContext1 = new NorthwindSampleDataContext();
为 Form_Load 事件创建一个事件处理程序,并将下面的代码添加到该事件处理程序中:
customerBindingSource.DataSource = northwindSampleDataContext1.Customers;
按 F5 运行代码。
当窗体打开时,单击 bindingNavigatorMoveNextItem 按钮,滚动浏览公司并验证 ordersDataGridView 是否更新为显示选定客户的订单。
保存更改
在将控件添加到 O/R 设计器时,不会启用“bindingNavigator”上的“保存”按钮。若要使用户可以保存更改,必须先启用“保存”按钮,然后添加用于保存已更改数据的代码。
启用“保存”按钮
单击“bindingNavigator”上的“保存”按钮。(该按钮带有软盘图标。)
在“属性”窗口中,将“Enabled”属性设置为“True”。
双击该“保存”按钮创建一个事件处理程序,并切换到代码编辑器。
将下面的代码添加到“保存”按钮事件处理程序中:
northwindSampleDataContext1.SubmitChanges();
按 F5 运行代码。
更改某一“Shipped Date”字段中的值,然后按 TAB 键提交更改。
单击“保存”按钮。
关闭窗体。
按 F5,并验证所做的更改是否已保存。