博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ To SQL中使用继承(附源码)
阅读量:6248 次
发布时间:2019-06-22

本文共 850 字,大约阅读时间需要 2 分钟。

有的时候我们在设计数据库的时候发现如果完全把商务逻辑中的类影射到表中可能会照成数据库中很多表都很相似,甚至结构上都是一样的,下面举一个例子来说明如何处理这种情况。假设我们正在创建一个图书销售网站,但客户却希望这个图书销售网站可能需要销售其他产品,在业务逻辑层我们可能设计如下:

表结构设计如下:

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

 

ContractedBlock.gif
Product

 

book类:

 

ContractedBlock.gif
book类:

 

OtherProduct类

 

ContractedBlock.gif
OtherProduct类

 

数据上下文

ContractedBlock.gif
数据上下文

 

这里最好将数据上下文以及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)")]
应用:
如果我们需要添加一本书到数据库中我们可以使用如下代码

 

ContractedBlock.gif
添加一本书

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

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

ContractedBlock.gif
添加其他商品

 

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

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

 

ContractedBlock.gif
检索所有书

 

本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2008/09/10/1288338.html
  ,如需转载请自行联系原作者
你可能感兴趣的文章
Homestead小结
查看>>
2015年iOS开发总结
查看>>
CocoaPods 安装与使用
查看>>
学习笔记:查最大内存
查看>>
javascript设计模式与开发实践(二)- 封装和原型模式
查看>>
1475: 方格取数
查看>>
太阳黑子
查看>>
[转载]date命令时间转换
查看>>
适配iOS11新特性代码在Xcode8 上编译通过的方法
查看>>
别再问什么是Java内存模型了,看这里!
查看>>
2014.5.7—20岁这几年
查看>>
javac - Java programming language compiler
查看>>
异常处理
查看>>
Python多线程程序中的MYSQL连接管理研究
查看>>
Prometheus学习系列(七)之名词解析
查看>>
一文彻底搞懂Dart的event队列
查看>>
iOS面试题06-其他
查看>>
JSON和JSONP
查看>>
2019年互联网女皇趋势报告:小程序创新创业商业模式引领全球
查看>>
C# 递归模型定义。赋值
查看>>