与其它ORM框架相比,XCode拥有最强的多数据库正向反向工程,暂时还没有发现能在这点上超于XCode的,哈哈!
但是,XCode的多数据库反向工程,也是有代价的,不同数据库的数据类型相差十万八千里,我们不可能完全支持。
所以,我们只做了常见的一些数据类型支持,但是这些已经足以满足99%的要求。
最佳数据类型如下:
1,整型。Int32是标准配置,这个必须有的。在Oracle,整型就是小数为0的Numeric
2,长整型。Int64,大部分数据库都有吧。
3,短整型。Int16,这个要小心了,似乎有些数据库不支持,不支持时XCode会自动选Int32,兄弟就不要省这点存储空间啦。
4,布尔型。Boolean,大部分数据库支持,MySql不支持,它一般用一个枚举Y/N来实现,XCode有支持。
5,浮点数。单精度Fload双精度Double,建议一律用Double,否则不同数据库很难统一,还有千万小心精度设置和小数位数,XCode反向工程可能不能把精度和小数位数完美的迁移到其它类型数据库,同类型没有问题。
6,货币。Decimal,货币类型必须有的,对应MSSQL的Money。开发的时候小心,不要拿Decimal判断两个值是否相等,应该相减判断差值是否小于0.000001,这个小数自己看情况定。
7,时间日期。DateTime,各种数据库,一律用时间日期DateTime,不支持单独的Date或Time的迁移。这个类型是XCode里面最为痛苦的一个类型,单独的Date和Time根本无法实现不同类型数据库的兼容。
8,字符串。String,在MSSQL一律用nvarchar,Unicode变长。字符串类型是唯一完整支持不同数据库设置长度的,以上类型全部不能完整支持。
9,大文本。String,在MSSQL一律用ntext。在.Net中同为String,根据不同数据库的字符串最大长度(MSSQL是4000),识别为nvarchar还是ntext。
最佳体验:
1,单一主键,建议用自增ID。XCode支持迁移自增字段的数据,当然,如果需要合并数据,那得自己处理逻辑
2,建立各种索引。
最差体验:
0,零号是最最最糟糕的,XCode不支持可空类型,所以千万不要让null和“”有不同的业务意义,各种类型的默认值代表无效数据。
1,除了字符串长度外,其它类型绝对绝对,尽可能的不要设置其它属性,包括长度、精度、小数位数,否则XCode不能实现完美迁移
2,XCode目前不支持各种数据库的外键。新增的表间关系是通过猜测得到的,规则:字段名等于另一个表名加主键名时,认为是外键
3,不要用Guid类型和二进制类型,XCode只能支持正向工程,不能支持它们的反向工程。可用nvarchar(32)替代Guid
4,字符串尽量不要用varchar/char等,因为不同数据库甚至相同数据库的不同版本,差别好大。这样省不了多少空间。
5,尽可能的不要用默认值。目前只有当前时间默认值支持好一点,newid()也有简单的支持,这块太痛苦了,也许将来不支持了。
XCode内部没有类型映射表,别乱猜测!!!
ADO.Net的架构里面有一个DataTypes的模式,XCode利用的正是它,所以,什么字段类型对应什么.Net类型,是各种数据库驱动自身说了算,不是XCode说了算,所以我们也不知道所有类型是否支持。
反正这么多年,我们占用这些类型,就已经足够了。
最后补一句:
我们只做最常见的80%日常工作,什么特别的情况,自己想办法!我不相信神话,我只相信汗水!我不相信命运,我只相信双手!