使用 Northwind 对象模型 (EDM)
若要在应用程序代码中使用在邻近主题中设计和生成的 Northwind 对象模型,请添加对 DLL 的引用以及一条指定 NorthwindLib 命名空间的 using
指令。命名空间的类型可以在不含 SQL 语法的应用程序代码中使用。
配置文件和连接字符串
使用该对象模型需要连接到存储应用程序数据的数据库。还需要指向由架构生成的 DLL 提供的运行时对象的实体连接。
exe.config 文件包含用于连接到 SQL Server 数据库并建立实体连接的连接字符串。借助于实体连接,可以从代码访问对象模型中的实体和关联。
开发人员必须将连接字符串文本添加到 exe.config 文件。此应用程序指定了类 Northwind。赋值 providerName="System.Data.EntityClient"
指定了一个实体连接,该连接使用 Northwind 映射规范中定义的映射架构。
连接字符串还标识了 SQL 连接所使用的服务器:提供程序 connection string="server=servername"
。
下面的示例演示 exe.config 文件的内容。
?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Northwind"
connectionString='Metadata=.;
Provider=System.Data.SqlClient;
Provider Connection String="server=servername;
database=Northwind;Integrated Security=true;
Connection Timeout=5;multipleactiveresultsets=true"'
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
元数据(包括概念性架构、存储元数据和映射规范)的路径由赋值语法 Metadata=.
指定。在本示例中,文件与可执行文件位于同一文件夹中,因此路径由句点 (.) 指定,如语法 Metadata=.
所示。如果架构文件和映射文件不在同一文件夹中,则必须指定完整路径。
注意 |
---|
该连接字符串将多个活动结果集设置为 true,为了使每次在同一个连接上打开另一个数据读取器时都在关联上调用 Load 方法,必须进行这样的设置。 |
应用程序代码
以下代码使用实体和关联定义在概念性架构和映射若要存储元数据在映射规范。有关此数据模型的详细信息,请参见 Northwind 模型 (EDM)。打开一个与从主题 Northwind 概念架构 (EDM) 中定义的概念性架构生成的 ObjectContext 的 EntityConnection。NorthwindLib 命名空间中的实体和关联用于显示诸如销售订单标识符之类的实体的属性,从实体之间的关联查找客户,显示产品,以及查找和显示通过关联与产品相关的产品类别。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NorthwindLib;
namespace NorthwindClient
{
class Program
{
static void Main(string[] args)
{
try
{
using (NorthwindLib.Northwind DB = new Northwind())
{
foreach (SalesOrder salesOrder in DB.SalesOrders)
{
salesOrder.CustomerReference.Load();
Console.WriteLine(
"Customer Contact: {0} ** OrderID: {1}",
salesOrder.Customer.ContactName,
salesOrder.OrderID.ToString());
}
foreach (Product product in DB.Products)
{
product.CategoryReference.Load();
Console.WriteLine(" Product: " +
product.ProductName +
" ** Category: " +
product.CategoryReference.Value.CategoryName);
}
DB.Connection.Close();
}
}
catch (System.Data.MappingException e)
{
Console.WriteLine(e.ToString());
}
catch (System.Data.CommandExecutionException e)
{
Console.WriteLine(e.ToString());
}
}
}
}