拼吾爱程序人生

首页 » .Net编程 » Linq » LINQ To SQL中使用继承(附源码)
cobra - 2008-9-11 7:54:00
有的时候我们在设计数据库的时候发现如果完全把商务逻辑中的类影射到表中可能会照成数据库中很多表都很相似,甚至结构上都是一样的,下面举一个例子来说明如何处理这种情况。假设我们正在创建一个图书销售网站,但客户却希望这个图书销售网站可能需要销售其他产品,在业务逻辑层我们可能设计如下:


 附件: 您所在的用户组无法下载或查看附件

表结构设计如下:


 附件: 您所在的用户组无法下载或查看附件

那么如何映射对象和表呢,请看如下代码:
Product

Code


book类:

Code


OtherProduct类

Code


数据上下文

Code


这里最好将数据上下文以及product类从dbml文件中分离出来,因为这里边有一部分需要我们自己定义。这里边主要需要我们自定义的部分就是product类,需要在类前添加如下特性:
[InheritanceMapping(Code = "1", Type = typeof(Product), IsDefault = true)]
[InheritanceMapping(Code = "2", Type = typeof(Book))]
[InheritanceMapping(Code = "3", Type = typeof(OtherProduct))]
还有就是用于区分的属性TypeID前也要修改特性如下:
[Column(IsDiscriminator = true, Storage = "_TypeID", DbType = "VarChar(50)")]
应用:
如果我们需要添加一本书到数据库中我们可以使用如下代码



添加一本书

Code


在这里我们可以查看sql语句为:


 附件: 您所在的用户组无法下载或查看附件


如果我们需要添加一个其他产品到数据库我们可以使用如下代码:


添加其他商品

Code


在这里我们可以查看sql语句为:


 附件: 您所在的用户组无法下载或查看附件

如果我们需要检索所有图书代码如下:



检索所有书

Code


源码下载:
 附件: 您所在的用户组无法下载或查看附件






(文/nuaalfm  出处/博客园)

 您可能对 [Linq] 的这些文章也感兴趣:

LINQ TO SQL 复杂查询
LINQ体验(16)——LINQ to SQL语句之DataContext
LINQ体验系列文章
深入浅出学Linq:Linq to SQL How do I(1)
LINQ中实现随机查询数据库中记录
Implementing NOLOCK with LINQ to SQL and LINQ to Entities
LINQ体验(9)——LINQ语句之Insert/Update/Delete操作
LINQ体验(18)——LINQ to SQL语句之视图和继承支持
深入浅出学Linq:Linq to SQL Provider的初始化
LINQ 从数据库读数据生成 XML
1
查看完整版本: LINQ To SQL中使用继承(附源码)
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: