與其它ORM框架相比,XCode擁有最強的多數(shù)據(jù)庫正向反向工程,暫時還沒有發(fā)現(xiàn)能在這點上超于XCode的,哈哈!
但是,XCode的多數(shù)據(jù)庫反向工程,也是有代價的,不同數(shù)據(jù)庫的數(shù)據(jù)類型相差十萬八千里,我們不可能完全支持。
所以,我們只做了常見的一些數(shù)據(jù)類型支持,但是這些已經(jīng)足以滿足99%的要求。
最佳數(shù)據(jù)類型如下:
1,整型。Int32是標準配置,這個必須有的。在Oracle,整型就是小數(shù)為0的Numeric
2,長整型。Int64,大部分數(shù)據(jù)庫都有吧。
3,短整型。Int16,這個要小心了,似乎有些數(shù)據(jù)庫不支持,不支持時XCode會自動選Int32,兄弟就不要省這點存儲空間啦。
4,布爾型。Boolean,大部分數(shù)據(jù)庫支持,MySql不支持,它一般用一個枚舉Y/N來實現(xiàn),XCode有支持。
5,浮點數(shù)。單精度Fload雙精度Double,建議一律用Double,否則不同數(shù)據(jù)庫很難統(tǒng)一,還有千萬小心精度設(shè)置和小數(shù)位數(shù),XCode反向工程可能不能把精度和小數(shù)位數(shù)完美的遷移到其它類型數(shù)據(jù)庫,同類型沒有問題。
6,貨幣。Decimal,貨幣類型必須有的,對應(yīng)MSSQL的Money。開發(fā)的時候小心,不要拿Decimal判斷兩個值是否相等,應(yīng)該相減判斷差值是否小于0.000001,這個小數(shù)自己看情況定。
7,時間日期。DateTime,各種數(shù)據(jù)庫,一律用時間日期DateTime,不支持單獨的Date或Time的遷移。這個類型是XCode里面最為痛苦的一個類型,單獨的Date和Time根本無法實現(xiàn)不同類型數(shù)據(jù)庫的兼容。
8,字符串。String,在MSSQL一律用nvarchar,Unicode變長。字符串類型是唯一完整支持不同數(shù)據(jù)庫設(shè)置長度的,以上類型全部不能完整支持。
9,大文本。String,在MSSQL一律用ntext。在.Net中同為String,根據(jù)不同數(shù)據(jù)庫的字符串最大長度(MSSQL是4000),識別為nvarchar還是ntext。
最佳體驗:
1,單一主鍵,建議用自增ID。XCode支持遷移自增字段的數(shù)據(jù),當然,如果需要合并數(shù)據(jù),那得自己處理邏輯
2,建立各種索引。
最差體驗:
0,零號是最最最糟糕的,XCode不支持可空類型,所以千萬不要讓null和“”有不同的業(yè)務(wù)意義,各種類型的默認值代表無效數(shù)據(jù)。
1,除了字符串長度外,其它類型絕對絕對,盡可能的不要設(shè)置其它屬性,包括長度、精度、小數(shù)位數(shù),否則XCode不能實現(xiàn)完美遷移
2,XCode目前不支持各種數(shù)據(jù)庫的外鍵。新增的表間關(guān)系是通過猜測得到的,規(guī)則:字段名等于另一個表名加主鍵名時,認為是外鍵
3,不要用Guid類型和二進制類型,XCode只能支持正向工程,不能支持它們的反向工程?捎胣varchar(32)替代Guid
4,字符串盡量不要用varchar/char等,因為不同數(shù)據(jù)庫甚至相同數(shù)據(jù)庫的不同版本,差別好大。這樣省不了多少空間。
5,盡可能的不要用默認值。目前只有當前時間默認值支持好一點,newid()也有簡單的支持,這塊太痛苦了,也許將來不支持了。
XCode內(nèi)部沒有類型映射表,別亂猜測!!
ADO.Net的架構(gòu)里面有一個DataTypes的模式,XCode利用的正是它,所以,什么字段類型對應(yīng)什么.Net類型,是各種數(shù)據(jù)庫驅(qū)動自身說了算,不是XCode說了算,所以我們也不知道所有類型是否支持。
反正這么多年,我們占用這些類型,就已經(jīng)足夠了。