1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了。使用上有些地方还是比较方便的。DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护。

2.框架完全支持调试时生成的SQL语句跟踪,你可以很清晰地看出是哪里的写法出了问题。

3.框架附加了完全支持查询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 bNeedQueryProvider

相关说明:

/// <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("") && a.UserCode == "")
.OrderBy(q => q.OrderBy(q.UserID))
.Pager(, ).ToConditionResult();

ConditionResult<T>的信息里面包括这里面总共有多少条数据(分页前),List带有结果集里的东西。。。

其它写法:

 var userList = (from a in DMS.Create<Adm_User>()
where a.UserID == && a.UserName.Like("")
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

DMSFrame 之简单用法(一)的更多相关文章

  1. DMSFrame 之简单用法(二)

    上次说了下DMSFrame的一些查询方式,之前也有好多朋友问了下这个ORM与EF有什么样的区别. 要论区别,我自己也总结了几点.如果有其它朋友知道的,可以回复补充下. 1.不需要编辑的时候需要再次查询 ...

  2. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  3. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  4. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  5. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  6. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  7. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  8. TransactionScope简单用法

    记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...

  9. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

随机推荐

  1. Marbles启动信息

    body-parser deprecated undefined extended: provide extended option app.js:40:20 -------------------- ...

  2. C#调用dll提示"试图加载格式不正确的程序"解决方法

    程序在32位操作系统上运行正常,在64位操作系统上运行读卡功能提示”试图加载格式不正确“. ------------------------------------------------------ ...

  3. LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对

    回到目录 在上一篇文章中提到了并发冲突,还说详细的说明在这讲来说,呵呵,那现在就说一下吧! 并发冲突产生的原因 事实上,linq to sql中的并发冲突是指记录在进行update操作时,客户端A1取 ...

  4. iOS-图片拉伸技巧

    iOS开发中我们会遇到渐变的背景,内容可变的流式标签,聊天气泡(QQ聊天气泡),由于内容是可变的,宽度和高度同样可变,这样就是导致每次出现的尺寸与之前不一样.如果是需要设置的比较的多,估计美工会烦死, ...

  5. cached过高导致内存溢出 java head space

     最近公司线上遇到老是内存溢出检查后发现cached过高 命令:free -m 命令:sync    //将缓存写入硬盘   cat /etc/redhat-release 这个是查看系统版本的命令c ...

  6. Leetcode 101 Symmetric Tree 二叉树

    判断一棵树是否自对称 可以回忆我们做过的Leetcode 100 Same Tree 二叉树和Leetcode 226 Invert Binary Tree 二叉树 先可以将左子树进行Invert B ...

  7. 动软商城系统可免费下载了,专业批发分销商城系统,ASP.NET商城系统

    动软商城系统是一套集CMS资讯+品牌Shop商城+WAP商城+APP手机客户端+SNS用户互动社区于一体的全新电商营销解决方案.主要为企业树立企业品牌形象,实现独立网络推广,充分集成网站SEO.企业微 ...

  8. Activiti 查看流程图

    package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...

  9. sqlserver内存释放心得

    SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少.SQLserver会把所有处理过的SQL操作缓存在内存里,这 ...

  10. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...