之前簡單介紹了XLinq的一些功能,有很多功能都沒有提到,現在給XLinq加了一些功能,這次把所有功能都介紹一遍。
LINQ版:
LINQ版看起來明顯感覺比較麻煩,所以在簡單查詢的時候我更傾向於Lambda表達式
上面的語句生成的代碼是一致的
建立實體類的過程不再說
兩個表連接查詢,因為用Lambda實現比較復雜,所以後面都不再用Lambda實現
生成的語句
五個表連接查詢
生成的語句
因為linq本身的左連接寫法比較蛋疼,所以xlinq也沒有辦法,後面會想辦法簡化
生成的語句
生成的語句
生成的語句
生成的語句
這個功能主要針對EF中無法直接取日期的問題
生成的語句
Update子句必須采用這寫法才會有效
在調試的時候可直接看到SQL語句
通過配置文件實現多數據庫支持
有沒有園友注意到,我上面用的User實體並沒有進行任何特殊處理,但實際翻譯出來的語句是識別的Users表
這其實是"抄"的EF的約定大於配置的原則,默認情況下,實體名的復數就是表名,實體中的Id識別為主鍵並自動增長
如果需要自定義這些規則,則需要使用特性或鏈式API,我現在更喜歡鏈式API
重寫DataContext的ConfigurationModel方法即可使用鏈式API對實體相關信息進行配置,上面是指定了User實體的表名、主鍵及主鍵的數據來源為自動增長
若要創建表,則幾乎必須使用鏈式API對實體進行配置之後才能進行自動創建
另外這個功能有一定的限制,默認情況下不會啟用該功能,若啟用了也只有在數據庫中一個表都沒有的情況下才會自動創建表
這樣做是因為真正的數據庫運行環境其實很可能壓根不允許自動創建表,然後就是下面這個樣子,這樣一來這個功能其實並沒有太大用,只有在第一次初始化數據庫的時候才會用。
當然也可以始終自動創建表,這個需要稍微配置一下,當allwayAutoCreateTables為true時並且autoCreateTables為true時,將始終自動創建表
下面演示創建一個Test表
DataContext中的配置
創建的表
測試結果
查詢一次的情況下EF慢的妥妥的,XLinq微弱優勢
查詢N次的情況下EF這···還有人說EF慢?不過大概是因為緩存的原因,但最後一張圖看著又不太像,或許還跟GC什麼的關吧,所以還有人說EF慢麼··
或者是我測試代碼有問題?
測試結果
http://files.cnblogs.com/files/wzxinchen/XlinqDemo.zip