DMSFrame 之簡單用法(一)

1.DMSFrame是一個完整的ORM框架,框架相對來講也比成熟了。使用上有些地方仍是比較方便的。DLL文件大約300K左右,但卻能夠支持各類方式的查詢,徹底的LINQ化的方式書寫代碼,更有利於維護。html

2.框架徹底支持調試時生成的SQL語句跟蹤,你能夠很清晰地看出是哪裏的寫法出了問題。web

3.框架附加了徹底支持查詢SQL的寫法。更有效的解決複雜的SQL的問題sql

 

先上代碼嚐嚐先吧:數據庫

 

1 var query = DMS.Create<Adm_User>().Where(q => q.UserID == 1).ToEntity();

生成SQL參數以下:數組

SELECT [t0].[UserID],[t0].[UserName],[t0].[TrueName],[t0].[UserPwd],[t0].[DeptID],[t0].[DeptName],[t0].[UserCode],[t0].[CompanyEmail],[t0].[MobileNum],[t0].[StatusFlag],[t0].[LastLoginTime],[t0].[LoginTimes],[t0].[LastLoginIp],[t0].[ResetPwdFlag],[t0].[CreateTime],[t0].[CreateUser],[t0].[DeleteFlag],[t0].[DeleteTime],[t0].[DeleteUser],[t0].[UpdateUser],[t0].[UpdateTime],[t0].[Remark]
 FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
 WHERE ([t0].[UserID] = @p0)
ParameterName:@p0 Value:1 DbType:Int32

 能夠看出生成的查詢語句,會自動將參數信息自動轉化爲Parameter,這樣也有效杜絕SQL注入式攻擊緩存

 

WITH(NOLOCK)這個功能是後續添加的功能,稍候會補充哪裏能夠修改時面的內容


回到DMS當中,咱們能夠看到參數說明信息


 

Create方法有四個參數信息框架

string bDataBase, bool bNeedParams, bool bWithLock, bool bNeedQueryProvideride

相關說明:函數

/// <summary>
        /// DMS查詢引擎建立
        /// </summary>
        /// <typeparam name="T">類型參數必須是引用類型;這一點也適用於任何類、接口、委託或數組類型。</typeparam>
        /// <param name="bDataBase">數據庫名稱</param>        
        /// <param name="bNeedParams">否使用參數形式生成SQL</param>
        /// <param name="bWithLock">是否反向定義WITH(NOCLOCK)</param>
        /// <param name="bNeedQueryProvider"></param>
        /// <returns>DMS^T</returns>

1.Create能夠加入bDataBase數據庫名稱,此參數會自動在表上面加入數據庫的說明,默認爲空(暫只測試過MSSQL)測試

2.bNeedParams是否使用參數的形式去解析SQL,默認爲true

3.bWithLock 是否反向定義生成With(nolock)字段,這個是根據數據庫配置去生成些查詢方式的,默認爲false,若是爲true,數據庫配置XML若是設置成須要nolock的話,剛這裏就不會生成,反之亦然。

4.bNeedQueryProvider此參數自己是爲了作列權限去寫的框架,具體使用後續說明。。。。

 

那咱們查詢一些更復雜的例子呢

var query = DMS.Create<Adm_User>()
                .Where(q => q.UserName.Like("admin")) .Select(q => q.Columns(q.UserID, q.UserName))

解析以下:

SELECT [t0].[UserID],[t0].[UserName]
 FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
 WHERE ([t0].[UserName] LIKE @p0) ParameterName:@p0 Value:%admin% DbType:AnsiString

能夠看出Where條件裏面支持不少最基本的查詢,此處注意q.Columns這個寫法也是區別Linq的一些寫法的。如EF框架就不是這麼寫的。

 

目前Where條件方法支持有 GreaterThan | >, GreaterThanOrEqual | >=,LessThan | <,LessThanOrEqual | <=,Like | like %$%, NotLike | not like %$%,

BeginWith | like $%,FinishWith | like %$,In | in(params [] array),NotIn | not in查詢的方法

基本上大部分的方法在這裏都是支持的。GreaterThan 這些大於小於方法適用於string類型,若是是數字類型,好比int,是能夠直接使用 > < 號的

另:Where條件字段支持:IsNull | IS NULL, IsNotNull | IS NOT NULL, Replace | Replace(MSSQL),Substring | Substring(MSSQL),NewID | NEWID(),

等特殊方法。

 

var query = DMS.Create<Adm_User>()
                .Where(q => q.UserName.Like("admin")) .Select(q => new { UserID = q.UserID, UserName = q.UserName.Substring(1, 2), });

解析以下:

SELECT [t0].[UserID], Substring([t0].[UserName],1,2)  AS [UserName] 
 FROM [Adm_User]  AS  [t0] WITH(NOLOCK)  
 WHERE ([t0].[UserName] LIKE @p0) ParameterName:@p0 Value:%admin% DbType:AnsiString

分頁寫法:

ConditionResult<Adm_User> userList = DMS.Create<Adm_User>()
                  .Where(a => a.UserName.Like("1111") && a.UserCode == "1122")
                  .OrderBy(q => q.OrderBy(q.UserID))
                  .Pager(1, 2).ToConditionResult(0);

ConditionResult<T>的信息裏面包括這裏面總共有多少條數據(分頁前),List帶有結果集裏的東西。。。

 

其它寫法:

 

 var userList = (from a in DMS.Create<Adm_User>()
                    where a.UserID == 1 && a.UserName.Like("1")
                    select a);

 

INNER JOIN 寫法:

 var query = DMS.Create<Adm_User>()
                .Join(DMS.Create<Adm_Rights>(),
                (x, y) => x.UserID == y.RightsID,
                (x, y) => new
                {
                    x.UserCode,
                    x.UserID,
                    y.RightsName,
                    y.RightsParentID,
                    RID = y.RightsID,
                    RightsName2 = y.RightsName,
                });

另外還支持LeftJoin,RightJoin,寫法相近,這裏就不舉例了.

 

查詢結果函數有:

ToList<T>    --返回結果集信息,支持任意類,以類屬性自動給值,參數有幾個,1.是否啓用緩存,2.返回條數,3.對屬性是否忽略大小寫進行賦值

ToConditionResult<T>   --返回分頁結果集信息

ToResult<T>  --返回DataTable數據,若是沒有實體也沒有關係的.只要返回DataTable,想怎麼處理就怎麼處理,呼呼..

從上能夠看出,select查詢是支持匿名寫法的。生成的SQL語句如上,列查詢的方式也加了一個SQL函數

 以上是這章的一些查詢的例子。。暫先到這了。。

 相關下載:http://files.cnblogs.com/files/kingkoo/DMSFrameRights.zip 此版本爲之前的一個版本,最新的版本請加羣問羣主吧

新上傳DMSFrame版本文件:http://files.cnblogs.com/files/kingkoo/DMSFrame_Secure20150606.7z

相關文章
相關標籤/搜索