快速业务通道

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

视图

我们使用视图和使用数据表类似,只需将视图从“服务器资源 管理器/数据库资源管理器”拖动到O/R 设计器上,自动可以创建基于这些 视图的实体类。我们可以同操作数据表一样来操作视图了。这里注意:O/R 设计 器是一个简单的对象关系映射器,因为它仅支持 1:1 映射关系。换句话说,实 体类与数据库表或视图之间只能具有 1:1 映射关系。不支持复杂映射(例如, 将一个实体类映射到多个表)。但是,可以将一个实体类映射到一个联接多个相 关表的视图。 下面使用NORTHWND数据库中自带的Invoices、Quarterly Orders 两个视图为例,写出两个范例。

查询:匿名类型形式

我们使用下面代 码来查询出ShipCity 在London的发票。

var q =
  from i in db.Invoices
  where i.ShipCity == "London"
  select new
  {
    i.OrderID,
     i.ProductName,
    i.Quantity,
    i.CustomerName
  };

这里,生成的SQL语句同使用数据表类似:

SELECT [t0].[OrderID], [t0].[ProductName], [t0]. [Quantity],
[t0].[CustomerName] FROM [dbo].[Invoices] AS [t0]
WHERE [t0].[ShipCity] = @p0
-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

查询:标识映射形式

下例查 询出每季的订单。

var q =
  from qo in db.Quarterly_Orders
  select qo;

生成SQL语句为:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0]. [City],
[t0].[Country] FROM [dbo].[Quarterly Orders] AS [t0]

继承支持

LINQ to SQL 支持单表映射,其整个继承层次结构 存储在单个数据库表中。该表包含整个层次结构的所有可能数据列的平展联合。 (联合是将两个表组合成一个表的结果,组合后的表包含任一原始表中存在的行 。)每行中不适用于该行所表示的实例类型的列为 null。

单表映射策略 是最简单的继承表示形式,为许多不同类别的查询提供了良好的性能特征,如果 我们要在 LINQ to SQL 中实现这种映射,必须在继承层次结构的根类中指定属 性 (Attribute) 和属性 (Attribute) 的属性 (Property)。我们还可以使用O/R 设计器来映射继承层次结构,它自动生成了代码。

下面为了演示下面的 几个例子,我们在O/R设计器内设计如下图所示的类及其继承关系。

我们学习的时候还是看看其生成的代码吧!

具体设置映射继承 层次结构有如下几步:

根类添加TableAttribute属性。

为层次 结构中的每个类添加InheritanceMappingAttribute属性,同样是添加到根类中 。每个 InheritanceMappingAttribute属性,定义一个Code属性和一个Type属性 。Code属性的值显示在数据库表的IsDiscriminator列中,用来指示该行数据所 属的类或子类。Type属性值指定键值所表示的类或子类。

仅在其中一个 InheritanceMappingAttribute属性上,添加一个IsDefault属性用来在数据库表 中的鉴别器值在继承映射中不与任何Code值匹配时指定回退映射。

为 ColumnAttribute属性添加一个IsDiscriminator属性来表示这是保存Code值的列 。

下面是这张图生成的代码的框架(由于生成的代码太多,我删除了很 多“枝叶”,仅仅保留了主要的框架用于指出其实质的东西):

[Table(Name = "dbo.Contacts")]
[InheritanceMapping(Code = "Unknown", Type = typeof (Contact),
          IsDefault = true)]
[InheritanceMapping(Code = "Employee", Type = typeof (EmployeeContact))]
[InheritanceMapping(Code = "Supplier", Type = typeof(SupplierContact))]
[InheritanceMapping(Code = "Customer", Type = typeof (CustomerContact))]
[InheritanceMapping(Code =

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号