经过测试以下数据类型可以对应,如对应有误在转换数据类型时可能会出错:
oracle | C# | 备注 |
number(1-4) | Int16/shot | |
number(5-9) | Int32/int | |
number(10-19) | Int64/long | 雪花ID属性定义为long |
number(20-) | decimal |
注意:我使用的用雪花ID算法生成的长度为19,C#属性类型定义为long,数据库中长度定义为number(19)即可。
开发中遇到两个查询条件 生成SQL的问题(数据库使用oracle 11g r2,程序使用C#,ORM框架使用EF):
数据库中字段类型:
CREATE TABLE test
(
a VARCHAR2(10 BYTE) --对应的属性为字符串
, b number(10) --对应的属性是 枚举类型
}
实体类:
public class test{
public string a{get;set;}
public E_C b{get;set;}
}
//枚举
enum E_C{
one=1,
two=2
}
问题1、以字符串a字段查询,字段定义为字符串,如果查询的参数值是:0-9,那么EF生成的sql中值不带引号,如 :where a=1,正常应生成:a='1';
问题2、以枚举字段b查询,生成的SQL是: where cast(b as number(10, 0))=1, 其中多了一个cast的转换过程,期望生成的sql是这样的:where b=1。
以上两个问题如有解决方案,请留言指点如何解决!!或加我微信:gbcore