ORM中数据类型的无缝转换

原创 2013年12月02日 16:37:32

对于一个ORM框架来说,实体对象中或说是编程语言中的数据类型最好还是要能和数据库中的数据类型能实现自动的无缝转换,这样的好处是显而易见的,一是使用起来比较简单,减少重复性工作;二是可以充分利用编程语言(尤其是强类型的C#)的类型校验能力,可以显著减少bug。

要实现这个无缝转换,我们要做这么两件事:

1 确定转换点和转换方向;

2 确定要做哪些转换;

确定转换点很简单,就是在数据库的操作点上,也就是增删改查,更具体的就是在Insert/Delete/Update/对象的初始化函数Init_Delegate中。转换方向也很清楚,前三个函数是从c#到数据库,后一个是从数据库到c#。

应当注意的是,c#和数据库之间的数据转换我们只需要考虑简单数据类型就可以了,不需要考虑结构化的数据类型。由于和数据库的交互我们是采用的ado,所以简单的数据类型我们又可以划分为如下几种:

1 数值类型,可以直接拼入sql语句中;

2 字符串、日期、字节数组类型,应通过参数的方式进行传递;

而sql语句的拼接主要发生点在于:

Insert:主要是values子句;

Delete:主要是where子句;

Update:where和set子句;

Select:主要是where子句;

在这些子句中,我们首先要判断数据类型,然后选择是直接拼入相应子句,还是拼入参数,然后在对参数进行赋值。

从c#到数据库的转换,数值类型和字符串、日期类型都比较好处理,需要进行特殊处理的有:

1、bool型稍麻烦点:要根据其值的真假先转换为1/0,然后再传递;

2、枚举类型要先根据基类型也转换为相应的数值,然后再传递;

3、现在xml用的越来越多,所以也要能支持,要将其先转换为字节数组,然后再传递。

反过来,从数据库到c#的转换也就是上面的逆过程,由于c#在从数据库读取数据时,已经按数据库中定义的存储数据的各列的数据类型将其转换为了对应c#中的数据类型,所以我们其实只要关心刚才列举的bool、枚举、xml这三类就可以了:

1、bool比较简单,判断一下数据是否等于1就可以了;

2、枚举比较麻烦,要识别出目标类型是枚举类型,然后进行相应的转换;

3、xml就是将字节数组反向转换回来。


版权声明:本文为博主原创文章,未经博主允许不得转载。

VC++不同数据类型的转换

  • 2012年04月13日 15:49
  • 111KB
  • 下载

PHP数据类型转换

  • 2012年12月18日 16:17
  • 906B
  • 下载

C语言运算中的数据类型自动转换原则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给...

jni数据类型转换

  • 2017年02月05日 15:21
  • 6.36MB
  • 下载

Java中各个数据类型之间的转换

  • 2009年05月08日 13:06
  • 45KB
  • 下载

Java中的byte/char/String数据类型转换

前言:项目中遇到的实际问题,Android手机和硬件通过Socket通信,手机可能会对硬件批量设置定时任务,最多批量设置16个。但由于硬件接收大量报文后处理不过来,定时任务经常漏设,而且响应相对较慢,...

struts2学习笔记3数据类型转换

  • 2010年04月07日 20:49
  • 3.26MB
  • 下载

VC常用数据类型使用转换详解

  • 2010年05月03日 10:32
  • 3KB
  • 下载

SSIS无法在unicode和非unicode 字符串数据类型之间转换

场景:SSIS从oracle抽到sqlserver,一个表对表到数据仓库ODS层的抽取,没有任何逻辑结果遇到问题: SSIS无法在unicode和非unicode 字符串数据类型之间转换 如下图2...

数据类型转换

  • 2012年10月17日 16:50
  • 29KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORM中数据类型的无缝转换
举报原因:
原因补充:

(最多只允许输入30个字)