.NET的ORM框架 SqlSmart

jopen 12年前發布 | 21K 次閱讀 .NET 持久層框架

1. SqlSmart是什么?

SqlSmart是一個DotNet類庫,它可以充分利用 codeinsight ,面向對象技術來幫助程序員更快的,更準確到編寫sql,這樣的sql以容易重構的。 聽起來陌生?這是想法我之前并沒有在其他ORM技術,比如 Hibernate,ROR內這樣大名鼎鼎到類庫中見過(如果你發現這并不確切,請給我打個招呼)。 不過它不像是聽起來那么復雜,實際上,它的主要特點就是簡單。我會繼續詳細的說明,包括必要到例子。 鑒于簡單,也不需要特定到語言特色的支持,因此,在其他語言中一樣可以實現。 不過,我發現C#的模板技術,和RTTI 讓代碼編寫更加容易,并且VS到code insight技術讓SqlSmart工作良好。 實際上我的實現正是基于C#來做的。

SqlSmart和Hibernite有類似之處,都是采用類表達數據庫,不同的是,掌握后者需要一本書和很多的實踐,掌握前者你需要的只是看看這篇文檔,然后下載一份去嘗試。

2. SqlSmart能做什么?

用一個例子來說明吧。 如果給你一個數據庫,內有表兩張。一個Dept,一個Person,這是我們比較常見到表,他們可以有關聯關系,比如Person和Dept有多對一的關系。 它們到創建sql為:

drop table Person drop table Dept create table Person (
id int, DeptId int, name varchar(10)
) create table Dept (
id int, name varchar(10)
) 那么對它到常用操作比如查詢PersonList :
sql = "select d.name as deptname,p.name,p.id from person p left join dept d on p.deptid = d.id"
這對大家來說是再熟悉不過的了。對我也是如此,我自從第一次使用sqlserver就是這么干的,干了很多年了。 那么在SqlSmart內將會是

string sql = ""; sql = "select {0},{1},{2} from {3} left join {4} on {5} ={6} "; sql = string.Format(sql, Dept.Name ,Person.name,Person.id, Person, Dept, Person.DeptId, Dept.Id);
差別不大,實際上SqlSmart的關鍵技術不去改變寫sql到過程。不想Hibernian,ROR以類為核心,而Linq看起來像是sql,實際上不是。有些很細微到,麻煩的模式切換。 我的觀點一向是sql是工業標準,圍繞著sql去做工作,而不是另外建立一套專有方案,會讓遷移模式變得簡單。 那么好處是什么?
3. 更快,更加精確,不必改變現在的習慣。
3.1 一般sql是基于字符串的,無法充分利用語言的編譯特性去檢查錯誤。 SqlSmart可以更好到利用編譯器技術去檢錯。 3.2 當重構的時候,知道表,字段在那里被引用了至關重要。 使用Pure sql要查詢應用,只能使用Find,不精確。SqlSmart因為用類來表達表和字段,想要查找應用就直接用VS到Find References即可。 3.3 當需要改名的時候,SqlSmart比較方便的改名。 使用VS有些2年了,我常常發現在編程過程中,引入了新的特性的時候,改名以便支持更好的符合新的需求,是常常需要的。 需要在Pure sql內要改名,需要用find/replace ,改了之后需要測試,常常會出現改錯到情況。 而采用SqlSmart來產生Sql要修改表名,字段名,直接用F2搞定,不必測試,只要VS讓你改,就不會錯:邏輯上改名和原來的代碼是完全等效的。 3.4 Pure sql無法利用VS的代碼提示,而SqlSmart可以。
比如 Dept.Name ,Person.name,Person.id,這里到Person,Dept,Name,Id都是可以代碼提示的。
3.5 Linq,ROR,Hibernate都需要改變程序員到習慣,SqlSmart的改變很小。 看上面提供的對比例子就知道這一點是OK的。

采用SqlSmart可以更好到利用語言到編譯能力去檢錯,并且充分利用VS提供的重構,代碼提示功能。

項目主頁:http://www.baiduhome.net/lib/view/home/1328448369046

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!