一、框架的由来  快速入门

有关框架的更多信息,请看框架官方主页!

本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格,设计了OQL查询表达式。本框架的设计思想是通用的,完全可以移植到Java 平台,现在只提供了.NET平台的实现,暂且将本框架命名为

PDF.NET

从2013.10.1日起,原PDF.NET 将更名为

SOD

one SQL-MAP,ORM,Data Control framework

原PDF.NET框架将成为一个全功能的企业开发框架,而 SOD框架将是PDF.NET开发框架下面的 “数据开发框架"

PDF.NET 开源历史:

  1. 2010.2--PDF.NET3.0 会员发布版
  2. 2010.5--PDF.NET3.5 会员发布版
  3. 2011.3--PDF.NET4.0 会员发布版
  4. 2011.9--PDF.NET Ver 3.0 开源版    节前送礼:PDF.NET(PWMIS数据开发框架)V3.0版开源    http://www.cnblogs.com/bluedoctor/archive/2011/09/29/2195751.html
  5. 2012.9--PDF.NET Ver 4.5 开源版 节前送礼:PDF.NET(PWMIS数据开发框架)V4.5版开源
  6. 2014.1--PDF.NET Ver 5.1 春节前最后一篇,CRUD码农专用福利:PDF.NET之SOD Version 5.1.0 开源发布(兼更名)
  7. 2015.2--PDF.NET SOD Ver5.1 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

开源协议:

  • 框架类库开源协议:采用LGPL协议,该协议允许商业使用,但仅限于包含类库发布,不得将源码作为商业行为销售分发,详情请看该协议的官方说明。
  • 框架支持工具开源协议:采用GPL协议,不可用于商业销售分发和修改,如果你想用于商业用途或者闭源使用,请单独购买许可,详情请看该协议官方说明。
  • 框架相关示例Demo开源协议:采用MIT协议,可自由修改使用,详情请看该协议官方说明。

注:框架的支持工具指的是集成开发工具,可以连接各种数据库进行查询,生成实体类,SQL-MAP DAL和 SqlMap.config 文件。

二、开源捐助账号

右图为二维码捐款方式

感谢所有PDF.NET 框架的会员朋友热心的捐助,并为框架不断完善和推广作出的杰出贡献!2015新春之际,送红包给大家!

三、快速入门:

3.1,总览

SOD框架分为3大部分:

  1. SQL-MAP
  2. ORM
  3. Data Control

3.2,“SqlHelper”基础

这三大部分,都是基于AdoHelper组件,它符合MS DAAB标准,所以熟悉SqlHelper的人应该很容易上手,下面举例说明:

AdoHelper helper=new SqlServer();
DataSet ds=helper.ExecuteDataSet( ”Data Source=.;Initial Catalog=LocalDB;Integrated Security=True”,
CommandType.Text,
”SELECT * FROM Table_User”);

AdoHelper是一个抽象类,所以它可以实例化成其他数据库访问类,比如继续下面的代码:

helper=new Access(); //Access数据库访问类
DataSet dsAcc=helper.ExecuteDataSet( ”Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Engine Type=;Data Source=D:\Data\SuperMarket.accdb”,
CommandType.Text,
”SELECT * FROM Table_User”);

在 PWMIS.Core.dll SOD核心库中,内置了SqlServer,SqlServerCe,Access,Oracle,OleDb,Odbc 等常见的数据库访问类提供程序。

在程序中每次都指定连接字符串和查询命令类型,好处是“随用随取”,线程安全,随时随地“SqlHelper”,但不好之处就是代码冗余,所以可以把数据访问类类型和连接字符串放到应用程序配置文件中(App.config / Web.config ):

<connectionStrings>
<add name="AccessDb"
  connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Engine Type=6;Data Source= |DataDirectory|SuperMarket.accdb"
  providerName="Access"/>
</connectionStrings>

在上面的连接配置中, providerName="Access"    表示这将是用SOD框架的Access数据库访问提供程序,同样道理,如果 providerName="SqlServer"  将使用SqlServer提供程序。

如果是SOD 核心程序之外的数据访问提供程序,需要使用下面格式的连接配置:

<add name="default"
connectionString="server=10.0.0.1;User Id=pdfnet;password=pdfnet2015;CharSet=utf8;DataBase=test;Allow Zero Datetime=True"
providerName="PWMIS.DataProvider.Data.MySQL,PWMIS.MySqlClient"/>

这个配置说明,连接名为 default 的SOD数据访问驱动程序 所在程序集 是 PWMIS.MySqlClient.dll ,提供程序全名称是 PWMIS.DataProvider.Data.MySQL 。

注意:Web.config 文件中,连接字符串支持|DataDirectory| 路径格式。

配置了数据库连接信息之后,就可以在程序中像下面这样使用了:

using PWMIS.DataProvider.Adapter;//…
AdoHelper accessDb1=MyDB.Instance;//应用程序配置文件连接配置节的最后一个数据连接配置
AdoHelper accessDb2=MyDB.GetDBHelperByConnectionName(“AccessDb”); //连接字符串名字
AdoHelper mySqlDb=MyDB.GetDBHelperByConnectionName(“default”); //连接字符串名字
bool flag= accessDb.GetType() == typeof(Access); //flag=true;
bool flag2= mySqlDb.GetType() == typeof(PWMIS.DataProvider.Data.MySQL); //flag2=true;

注意示例中的 MyDB.Instance 对象,这是系统使用的默认数据访问类,它始终读取的是应用程序配置文件连接配置节的最后一个数据连接配置,这是一个静态单利对象,请勿在事务中使用它,初此之外,在任何地方使用它都是可以的,但仍然不建议你在多线程环境下使用 MyDB.Instance 这个AdoHelper的单例对象,推荐 accessDb2 的AdoHeper 实例化方式。

3.3,微型ORM

除此之外,AdoHelper 对象还是一个“微型ORM”,请看下面的示例:

AdoHelper dbLocal = new SqlServer();
dbLocal.ConnectionString = "Data Source=.;Initial Catalog=LocalDB;Integrated Security=True";
var dataList = dbLocal.GetList(reader =>
{
return new
{
UID=reader.GetInt32(),
Name=reader.GetString()
};
}, "SELECT UID,Name FROM Table_User WHERE Sex={0} And Height>={1:5.2}",, 1.60M);

上面将一条SQL语句的结果,直接映射到了一个匿名实体类上,注意还有格式化参数的功能。

如果不想接SQL结果映射到匿名类型上,而是一个结构根SQL结果类型相同的POCO类上,可以这样使用:

//假设UserPoco 对象跟 Table_User 表是映射的相同结构
AdoHelper dbLocal = new SqlServer();
dbLocal.ConnectionString = "Data Source=.;Initial Catalog=LocalDB;Integrated Security=True";
var list=dbLoal.QueryList<UserPoco>("SELECT UID,Name FROM Table_User WHERE Sex={0} And Height>={1:5.2}",, 1.60M);

该功能可以类似流行的Dapper 数据访问组件,可以使用SOD AdoHelper替代使用。

3.4,小结:

上面说明了PDF.NET SOD框架最基础的数据访问组件 AdoHelper 的使用,但这也是很多新手朋友不太清楚的地方,特别是 MyDB.Instance 单例对象容易滥用,一定要掌握。

SOD框架绝大部分情况下,只需要进行上面的数据连接配置,即可顺利运行代码了,比起Entity Framework 的配置来,是不是简单很多?

看到这里,我想你应该入门了,下面就让我们简要的浏览下SOD框架的一个大概。

----

四、SQL-MAP

你是不是曾经或者看到过别人做的项目,

  • 大量拼接SQL语句,或者SQL参数化查询后拖沓呈长而又繁琐的代码,甚至SQL满天飞?
  • 维护这样的代码是不是非常痛苦?
  • 每天写这样的CRUD代码是不是感觉有点浪费生命?

现在好了,你可以将所有SQL语句集中写到一个配置文件中,集中管理维护你的查询程序,甚至,这个工作你可以丢给DBA去做!

本功能类似于Java界著名的 iBatis 和移植到.Net的 MyBatis.Net ,但是,SQL-MAP去除了它们沉长的配置,并且使用工具自动生成代码,使得编写DAL 数据访问层不需要写一行代码,请参考下面的文章:

《PDF.NET 之SQL-MAP 使用图解教程》

更多的内容,你也可以参考SOD框架官方博客的介绍:

(PDF.NET框架实例讲解)将存储过程映射为实体类 深蓝医生 2011-08-18 17:25 阅读:1748 评论:6

使用XSD编写具有智能提示的XML文件(以SQL-MAP脚本为实例) 深蓝医生 2011-05-13 12:17 阅读:1609 评论:7

PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范 深蓝医生 2011-05-07 00:05 阅读:937 评论:1

抽象SQL查询:SQL-MAP技术的使用 深蓝医生 2011-05-06 11:59 阅读:3598 评论:21

使用OQL+SQLMAP解决ORM多表复杂的查询问题 深蓝医生 2011-02-25 19:08 阅读:928 评论:0

PDF.NET数据开发框架 之SQL-MAP使用存储过程 深蓝医生 2010-07-03 23:31 阅读:2386 评论:4

五、ORM

SOD框架发明了独具特色的ORM查询语言OQL,它基本覆盖了SQL92标准的大部分功能,使得你在VS IDE 使用“对象化的SQL”。目前做到这个功能的除了Linq之外,没有更多的ORM具有这个能力,但是对比EF框架的查询语言Linq,OQL有自己的特色,它跟SQL更为接近,对.NET框架的依赖非常小,这使得你有可能将OQL移植到Java ,C++ 这样的面向对象的语言。

下面给出一个简单的示例,有关该示例的详细内容,请参考这篇博客文章《DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架

SOD的实体类示例:

public class UserEntity:EntityBase, IUser
{
public UserEntity()
{
TableName = "Users";
IdentityName = "User ID";
PrimaryKeys.Add("User ID");
} public int UserID
{
get { return getProperty<int>("User ID"); }
set { setProperty("User ID", value); }
} public string FirstName
{
get { return getProperty<string>("First Name"); }
set { setProperty("First Name", value,); }
} public string LasttName
{
get { return getProperty<string>("Last Name"); }
set { setProperty("Last Name", value,); }
} public int Age
{
get { return getProperty<int>("Age"); }
set { setProperty("Age", value); }
}
}

这是一个简单的用户信息实体类,它继承了一个接口 IUser  ,在App.config 中配置了数据连接后,就可以像下面这样使用了:

//注册并从容器中创建实体类

EntityBuilder.RegisterType(typeof(IUser), typeof(UserEntity));
UserEntity user = EntityBuilder.CreateEntity<IUser>() as UserEntity;
//实体类作为索引器使用
bool flag = (user["User ID"] == null);//true

//删除测试数据
LocalDbContext context = new LocalDbContext();//自动创建表
OQL deleteQ = OQL.From(user)
.Delete()
.Where(cmp=>cmp.Comparer(user.UserID,">",)) //为了安全,不带Where条件是不会全部删除数据的
.END;
context.UserQuery.ExecuteOql(deleteQ);
Console.WriteLine("插入3条测试数据");
//插入几条测试数据
context.Add<UserEntity>(new UserEntity() { FirstName ="zhang", LasttName="san" });
context.Add<IUser>(new UserDto() { FirstName = "li", LasttName = "si", Age = });
context.Add<IUser>(new UserEntity() { FirstName = "wang", LasttName = "wu", Age = }); //查找姓张的一个用户
UserEntity uq = new UserEntity() { FirstName = "zhang" };
OQL q = OQL.From(uq)
.Select(uq.UserID, uq.FirstName, uq.Age)
.Where(uq.FirstName)
.END; //下面的语句等效
//UserEntity user2 = EntityQuery<UserEntity>.QueryObject(q,context.CurrentDataBase);
UserEntity user2 = context.UserQuery.GetObject(q);

注意:该实例需要SOD框架最新版本的支持,你也可以使用之前的方式,使用EntityQuery<T> 来操作实体类。

另外,SOD的ORM也支持根据接口之间创建实体类并查询的功能,请看下面的示例:

 static void TestGOQL()
{
string sqlInfo="";
//下面使用 ITable_User 或者 Table_User均可
List<ITable_User> userList =
OQL.FromObject<ITable_User>()
//.Select() //选全部自断
.Select(s => new object[] { s.UID, s.Name, s.Sex }) //仅选取3个字段
.Where((cmp, user) => cmp.Property(user.UID) < )
.OrderBy((o,user)=>o.Asc(user.UID))
.Limit(, ) //限制5条记录每页,取第一页
.Print(out sqlInfo)
.ToList(); Console.WriteLine(sqlInfo);
Console.WriteLine("User List item count:{0}",userList.Count);
}

有关该功能的详细内容介绍,请看博客文章《一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架》。

六、Data Control

框架支持Windows Forms,WebForms 的窗体编程,扩展了一套数据控件,包括常用的 文本框、复选框、单选框、列表框、日历控件、标签控件等。这些控件全部遵循SOD的窗体数据接口,实现这个接口的控件将极大的简化窗体应用程序的数据操作,有关内容详细介绍,请看这篇博客文章:

不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD

你也可以在 pwmis.codeplex.com 下载源码,找到下面地址对应的SimpleAccessWinForm

或者下载这个 PDF.Net_V4.6 WinForm 数据表单实例

或者看这个 WebTestTool

这2个示例应用程序,都演示了WinForm下如何使用Data Control 数据控件简化CRUD窗体编程。

另外,如果你是WebForms 应用程序,开源项目的超市管理系统源码 你可以看看,

或者直接下载这个(版本较老) PDF.Net_V4.6_OpenSource (new)

结束语:

SOD不仅仅是一个ORM,它还有SQL-MAP和DataControl,具体可以看框架官网 http://www.pwmis.com/sqlmap ,9年历史铸就的成果,坚固可靠。

非常感谢你看到这里,相信你初步了解了SOD框架的基本功能,如果您还有其它问题,欢迎你在项目的开源网站 pwmis.codeplex.com 的讨论去发帖,或者去官方博客相关文章回帖也可。

最后,祝愿所有.NET 程序员早日摆脱日复一日的CRUD功能,感谢大家对PDF.NET SOD框架一如既往的支持,

2015年新春之际,祝贺各位会员和其他使用框架的朋友喜气洋洋,合家欢乐,万事如意!

附注:如果大家还没有买到节日期间的火车票,推荐本框架开发作者自主开发的《12306无声购票弹窗通知小工具》,工作抢票2不误,绿色无毒安全放心!

深蓝医生

2015.2 月春节

PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引的更多相关文章

  1. Spring框架的IOC核心功能快速入门

    2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...

  2. pthon web框架flask(二)--快速入门

    快速入门 迫切希望上手?本文提供了一个很好的 Flask 介绍.假设你已经安装 Flask, 如果还没有安装话,请浏览下 安装 . 一个最小的应用 一个最小的应用看起来像这样: from flask ...

  3. SOD开源框架MSF(消息服务框架)进阶篇

    复习:在上一篇我介绍了MSF的基本订阅,模式就是,客户端A,订阅服务器.客户端B,订阅服务器.通过服务器广播消息, 所有订阅过的客户端都能接到消息. 进阶:在上一篇的基础上,增加客户端A,发送信息到服 ...

  4. SOD开源框架MSF(消息服务框架)介绍

    前言:之前想做消息的广播,拖着就忘记了,现在拿了医生的框架来学习,就按实现了之前想实现的功能. 传送门http://www.cnblogs.com/bluedoctor/,框架的获取,按传送门的链接就 ...

  5. Python遗传和进化算法框架(一)Geatpy快速入门

    https://blog.csdn.net/qq_33353186/article/details/82014986 Geatpy是一个高性能的Python遗传算法库以及开放式进化算法框架,由华南理工 ...

  6. 实体框架Entity Framework 4.1快速入门

    介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...

  7. 【Go语言系列】第三方框架和库——GIN:快速入门

    要求要安装Gin软件包,需要:1.安装Go(需要1.11+版本)2.设置Go工作区 安装1.下载并安装 gin: $ go get -u github.com/gin-gonic/gin 2.将 gi ...

  8. Hibernate入门第一讲——Hibernate框架的快速入门

    Hibernate框架的概述 什么是框架? 框架指的是软件的半成品,已经完成了部分功能. JavaEE开发的三层架构 了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经 ...

  9. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

随机推荐

  1. cordova编译报错:Execution failed for task ':processDebugResources'

    cordova编译报错:Execution failed for task ':processDebugResources' 引发这个错误的最扩祸首就是一个中文命名的文件,不知道什么时候加入的,我写了 ...

  2. emmet插件学习,练习中遇到一些问题

    emmet插件学习:帮助提高敲代码效率的插件 参考文献:Emmet(Zen coding)HTML代码使用技巧七则http://www.wzsky.net/html/Website/htmlcss/1 ...

  3. angularjs之插件ngRoute和ngAnimate

    使用ngRoute和ngAnimate配合使用,可以实现页面切换的效果. 如果有使用过swiper,就知道这个效果是怎么样的. 代码: <!DOCTYPE html> <html l ...

  4. SQL Server 错误日志收缩(ERRORLOG)

    一.基础知识 默认情况下,错误日志位于 : C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG 和ERRORLOG.n 文 ...

  5. SSIS 对数据排序

    SSIS 对数据排序有两种方式,一种是使用Sort组件,一种是使用sql command的order by clause进行排序. 一,使用Sort组件进行排序 SortType:升序 ascendi ...

  6. 什么才是正确的javascript数组检测方式

    前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具——typeof ...

  7. CSS绝对定位的应用

    × 目录 [1]跟随图标 [2]视频提示 [3]下拉菜单[4]边缘对齐[5]星号 [6]全屏适应[7]半区翻图[8]九宫格[9]等高布局[10]整体布局 前面的话 之前的博客文章已经详细介绍过绝对定位 ...

  8. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  9. 使用 CSS3 实现 3D 图片滑块效果【附源码下载】

    使用 CSS3 的3D变换特性,我们可以通过让元素在三维空间中变换来实现一些新奇的效果. 这篇文章分享的这款 jQuery 立体图片滑块插件,利用了 3D transforms(变换)属性来实现多种不 ...

  10. Elasticsearch聚合 之 Histogram 直方图聚合

    Elasticsearch支持最直方图聚合,它在数字字段自动创建桶,并会扫描全部文档,把文档放入相应的桶中.这个数字字段既可以是文档中的某个字段,也可以通过脚本创建得出的. 桶的筛选规则 举个例子,有 ...