任务 3 –创建对象映射–使用设计器– 创建对象视图
在Server Explorer中展开Data Connections。
展开Northwind 目录。
展开Tables 目录。
在Solution Explorer 中,双击Northwind.dbml 文件,以打开它。
从Server Explorer中的Tables 目录中,将Customers 表拖拽到打开的Northwind.dbml 设计器的面板上。
从Server Explorer中的Tables 目录中,将Products表拖拽到打开的Northwind.dbml 设计器的面板上。
从Server Explorer中的Tables 目录中,将Employees表拖拽到打开的Northwind.dbml 设计器的面板上。
从Server Explorer中的Tables 目录中,将Orders表拖拽到打开的Northwind.dbml 设计器的面板上。
从Server Explorer中的Stored Procedures目录中,将Top Most Extensive Products表拖拽到打开的Northwind.dbml 设计器的面板上。
点击Ctrl+Shift+B 以构建应用程序。这时,Program.cs中的Customer类将会与设计器生成的类冲突,将Program.cs中的Customer类删掉。
构建完成后,展开Solution Explorer中的Northwind.dbml,查看其对应的.cs文件。这是自动生成的映射类文件。注意,其中使用了与前面类似的属性。
对于包含许多表和存储过程的数据库来说,使用命令行工具SQLMetal可以提供更加强大的自动化支持,您可以选择使用,本实验将不包含该工具的介绍。
任务 4 – 使用表达式进行查询
在Solution Explorer中双击program.cs,回到程序代码当中。找到前面创建的ObjectQuery方法。现在,每个表都可以通过变量db的属性来进行访问。然后,查询的代码几乎与前面练习中使用的代码是一样的。添加下面的代码,以获取伦敦的客户:
{
var db = new NorthwindDataContext();
db.Log = Console.Out;
var results = from c in db.Customers
where c.City == "London"
select c;
foreach (var c in results)
Console.WriteLine("{0}\t{1}", c.CustomerID, c.City);
}
在这里,创建了一个NorthwindDataContext 对象(它扩展了前面第一个任务中使用的DataContext 类),用来表示一个强类型的数据库连接。值得注意的是,您不需要再指定连接字符串,智能提示将显示出设计器中所有的数据表。
点击Ctrl+F5 来构建和运行应用程序。在查看输出结果后,点击任意键以结束应用程序。
这时将显示出6个结果。这些客户在Northwind数据库中的Customer表中的City列都是London。
在使用设计器创建映射关系时,您也为其它数据表创建了映射。Customer类拥有一个到Orders表的一对多的映射。下面的代码将会查询多个表。
{
var db = new NorthwindDataContext();
db.Log = Console.Out;
var results = from c in db.Customers
from o in c.Orders
where c.City == "London"
select new { c.ContactName, o.OrderID };
foreach (var c in results)
Console.WriteLine("{0}\t{1}", c.ContactName, c.OrderID);
}
Select语句使用一个匿名类型(C# 3.0中的新功能)创建了一个新的对象。这个新建的类型包含了两部分的数据,包括原始数据中的属性名称(在这里,是ContactName和OrderID)。匿名数据在查询中使用非常方便。通过使用这些类型,它将自动完成创建结果类的工作,使得它保存不同查询的结果。
在前面的示例中,对象模型可以简单的通过调用c.Orders来引用对象之间的关系。这个关系是在设计器中定义的一对多的关系,而现在可以以这种方式来访问。
点击Ctrl+F5 来构建并运行应用程序。查看输出的结果,然后点击任意键以结束应用程序。