由于一直忙于Beetle的开发和优化,Smark.Data组件已经有很长一段时间更新。这段时间发现Smark.Data在某些情况下不足,而这些情况又比较普遍所以进行了1.5版的更新。其更新的主要功能包括:查询可填充到自定义对象中,可直接执行存储过程和执行存储过程数据填充到对象中。

查询可填充到自定义对象中

在使用组件的时候会针对表制定一个数据对象结构,在查询的时候进行对象填充。但很多时候我们是需要查询这个对象,但实际上并不需要获取其所有信息。很多时候查询只是获取某几个成员信息,如果在应用做不到按需查询那对数据库的性能将会在着很大的影响。所以在1.5版中添加了这一功能,以下通过简单应但要相应的功能。

   [Table("Employees")]public interface IEmployee{[ID]int EmployeeID { get; set; }[Column]string LastName { get; set; }[Column]string FirstName { get; set; }[Column]string Title { get; set; }[Column]string TitleOfCourtesy { get; set; }[Column]DateTime BirthDate { get; set; }[Column]DateTime HireDate { get; set; }[Column]string Address { get; set; }[Column]string City { get; set; }[Column]string Region { get; set; }[Column]string PostalCode { get; set; }[Column]string Country { get; set; }[Column]string HomePhone { get; set; }[Column]string Extension { get; set; }}

以上是一个简单的雇员信息描述。

            Expression exp = new Expression();var items = exp.List<Employee>();

以上操作是获取所有雇员信息,而产生的SQL如下:

Select  (EmployeeID) as p_EmployeeID,(LastName) as p_LastName,(FirstName) as p_FirstName,
(Title) as p_Title,(TitleOfCourtesy) as p_TitleOfCourtesy,(BirthDate) as p_BirthDate,
(HireDate) as p_HireDate,(Address) as p_Address,(City) as p_City,(Region) as p_Region,
(PostalCode) as p_PostalCode,(Country) as p_Country,(HomePhone) as p_HomePhone,
(Extension) as p_Extension from Employees

但有些时候并不想获取所有信息,如只获取雇员的简单联系信息。在1.5版本前的做法重新描述一个对象,并添加相关映射属性;在1.5版里就相对简单很多只需描述信息对象,并不需要描述映射属性。

  public class EmployeeContact{public string LastName { get; set; }public string FirstName { get; set; }public string Address { get; set; }public string City { get; set; }public string Region { get; set; }public string PostalCode { get; set; }public string Country { get; set; }public string HomePhone { get; set; }}

在查询的时候只需要,调用List方法的另一版本即可。

            Expression exp = new Expression();var items = exp.List<Employee, EmployeeContact>();

以上生成的SQL并不会获取所有字段,而是根据EmployeeContact和Employee相匹配的属性进行生成查询字段。

Select  (LastName) as p_LastName,(FirstName) as p_FirstName,(Address) as p_Address,
(City) as p_City,(Region) as p_Region,(PostalCode) as p_PostalCode,(Country) as p_Country,(HomePhone)
as p_HomePhone from Employees

存储过程执行

本人并不喜欢使用存储过程,但客观事实也有不少地方有使用存储过程的习惯。所以组件也直接支持存储过程处理,更方便使用存储过程的使用者。组件对存储过程的调用也和数据表访问一样,通过对象来描述;首先需要调用这样一个存储过程

以上存储过程有一个输入参数和一个返回参数,那可以这样定义一个存储过程映射对象

    [Proc]public class CustOrderHist{[PorcParameter]public string CustomerID{get;set;}[PorcParameter(Direction= System.Data.ParameterDirection.ReturnValue)]public int Result{get;set;}}

通过一个Proc属性来描述对象是一个存储过程描述对象,如果属性不指定名称则用对象名称作为存储过程名称调用;通过PorcParameter来描述一个属性对应的存储过程参数。这样描述后就可以进行一个存储过程执行.

            CustOrderHist p = new CustOrderHist();p.CustomerID = "ALFKI";DBContext.ExecProc(p);

如果有输出类型参数,执行完成后组件会自动把输出参数值填充到对应的属性上. 当需执行存储过程返回一个对象列表的时候可以,通过以下方法调用即可:

            CustOrderHist p = new CustOrderHist();p.CustomerID = "ALFKI";var items = DBContext.ExecProcToObjects<OrderHist>(p);

其属性对应关系是属性名和字段一致即可,对象成员不需要添加任何属性描述。

Smark.Data最新源码可以到http://smark.codeplex.com/获取

Smark.Data 1.5更新详解相关推荐

  1. 侍魂胧月传说服务器维护,侍魂胧月传说手游2021年6月2日停机维护更新详解

    在侍魂胧月传说手游中2021年6月2日更新了哪些有趣的内容呢?想了解2021年6月2日更新情况如何的话,接下来就让我们一起来看一下吧! 侍魂胧月传说手游2021年6月2日停机维护更新详解 <侍魂 ...

  2. fofa自动化爬虫脚本更新+详解

    fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...

  3. [Unity2018.2]ShaderGraph更新详解

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 洪流学堂公众号回复节点,获取ShaderGraph节点详解PDF文件(带目录). ShaderGraph 2018.2 更新详解 在2018.1 ...

  4. STM32应用IAP进行程序更新详解及实例

      这是以前就想写的一个小专题关于IAP,以及IAP在STM32编程的应用,专题分三小节,主要介绍常见的单片机烧录方式,IAP的实际应用,以及Ymodem协议在IAP编程中应用,在笔记吃灰很久了,终于 ...

  5. 【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器

    本文属于[Azure 架构师学习笔记]系列. 本文属于[Azure Data Factory]系列. 接上文[Azure 架构师学习笔记]-Azure Data Factory (3)-触发器详解-翻 ...

  6. mysql视图的更新 条件_mysql中视图更新详解

    视图的可更新性与视图中查询的定义是有关的 一.mysql中那些试图使不可更新的?以下类型的视图是不可更新的 1.包含以下关键字的sql语句:聚合函数(sum.min.max.count).distin ...

  7. Android热更新详解

    一 前言介绍 正好最近又看到热更新,对以前Android 热修复核心原理:ClassLoader类加载机制做了点补充. 从16年开始开始,热修复技术开始在安卓界流行,它以classloader类加载机 ...

  8. 【5G系列】PDCP (Packet Data Convergence Protocol)协议详解

    本人就职于国际知名终端厂商,负责modem芯片研发.在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客内容主要围绕: 5G协议讲解 算力网络讲解(云计算,边缘 ...

  9. Oracle 10g Data Pump Expdp/Impdp 详解

    本文转自David的Blog,原文链接http://blog.csdn.net/tianlesoftware/article/details/4674224 一. 官网说明 1.  Oracle 10 ...

最新文章

  1. iOS逆向(4)-代码注入,非越狱窃取微信密码
  2. Objective-C入门
  3. 构建、测试和部署驱动程序
  4. SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)
  5. 【PKUWC2018】随机算法【状压dp】【组合计数】
  6. HA集群之三:corosync+pacemaker实现httpd服务的高可用
  7. java gc 例子_Java GC.drawImage方法代码示例
  8. c++中sin,cos,arcsin等和在C/C++中使用pi (π) 值
  9. 201903-1小中大
  10. ERD Online介绍
  11. 643 · 最长绝对文件路径
  12. diy无感无刷电机霍尔安装_无刷直流电机霍尔传感器安装方法研究
  13. 转载:选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被破解。
  14. 用友U8的SQL SERVER 数据库结构说明表
  15. contentprovider与resolver使用
  16. php多表查询性能优化,MSSQL_SQL Server多表查询优化方案集锦,SQL Server多表查询的优化方案是 - phpStudy...
  17. Keychron Q1:客制化机械键盘|体验
  18. N把钥匙开门的概率问题
  19. 去除数组中指定元素的方法
  20. Blogbus博客*

热门文章

  1. iOS iphone屏幕分析(岂止而大)
  2. android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址
  3. class里面只能写以下5种
  4. 对lua协程的一点理解
  5. listen(int fd, int backlog)中的backlog含义
  6. SparkContext: Error initializing SparkContext解决方法
  7. wemosD1_WIFI模块 与 arduino
  8. MyBatis参数名称解析器-ParamNameResolver解析
  9. shell shift与{}_一文掌握shell脚本中shift的用法及功能
  10. 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法