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
  • 110KB
  • 下载

PHP数据类型转换

  • 2012-12-18 16:17
  • 906B
  • 下载

C语言中强制数据类型转换的总结

● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把ch...

jni数据类型转换

  • 2017-02-05 15:21
  • 6.36MB
  • 下载

Java包装类(Wrapper)、基本数据类型、String类之间的转换

基本数据类型和包装类之间的转化 >基本数据类型----->包装类 >包装类----->基本数据类型 >自动装箱拆箱 基本数据类型、包装类与String类之间的转化 >基本数据类型、包装类---...

转:c/c++数据类型转换1

(float,char,string,CString)版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://mrcatart.blogbus.com/logs/68590681...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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