# OF.Lib.DataAccess
**Repository Path**: OFProject/OF.Lib
## Basic Information
- **Project Name**: OF.Lib.DataAccess
- **Description**: 非常符合大众开发人员的编码习惯,在保持原生开发理念的基础上,极大的提高了开发效率和执行效率;支持多种DB的访问处理。主要特征如下:(1)对于单表(对应单实体对象)数据处理不需要手动编写SQL脚本,提供了基于拉姆达表达式的简便表达方法;(2)对于多表操作或者较复杂的SQL语句,按照原生的SQL语句写出来,再放置到配置文件对应的节点中,便于公司内部DBA Review,也方便即使需要切换DB类型时,由一个统一的地方修改,还有就是如果只是简单的调整一下SQL,不用重新编译程序发布,方便PS人员在线紧急处理。 (3)高性能的ORM处理,最底层采用Dapper作为ORM核心; (4)内置实现了读写分离的处理,对于1 Master->N Slave模式下,可自动负载Slave DB,当然,你也可以自己提供负载策略。 (5)支持分布式事务处理,使用极为简单。(6)各处可自定义的地方尽量基于接口,以方便你做自定义实现,以供不同情况下的扩展。
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 11
- **Forks**: 5
- **Created**: 2017-12-29
- **Last Updated**: 2022-03-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OF DataAccess是什么
数据访问处理一直以来是应用系统开发的核心之一,在.Net的DA发展历史中,有基于Ado.net的SqlHelper极简封装,有EntityFramework轻量级ORM DA,有语法优美的Linq to SQL/DataSet,还有更强大的舶来品Nhibernate、iBatis.Net等等。然而在老猿心中,这些,都不喜欢,那种基于原生模式的SQL语句调用模式,永远是心中的红牡丹或白牡丹。提供一套既原生亲切、又友好简便的ORM DA,便是OF DataAccess诞生的初衷。
# OF DataAccess特点
1. 对于单表(对应单实体对象)数据处理不需要手动编写SQL脚本,提供了基于拉姆达表达式的表达方法;该特点简化了对一些简单数据的处理,比如更新顾客状态,只需要一句:DAO.SO_Update<Customer>(new { CommonStatus = CommonStatus.DeActived }, null, f => f.LoginId == "uncleqin")即可。
2. 对于多表操作或者较复杂的SQL语句,按照原生的SQL语句写出来,再放置到配置文件对应的节点中;这便于公司内部DBA Review,也方便即使需要切换DB类型时,由一个统一的地方修改,还有就是如果只是简单的调整一下SQL,不用重新编译程序发布,方便PS人员在线紧急处理。
3. 高性能的ORM处理,最底层采用Dapper作为ORM核心;
4. 内置实现了读写分离的处理,对于1 Master->N Slave模式下,可自动负载Slave DB,当然,你也可以自己提供负载策略。
5. 各处可自定义的地方尽量基于接口,以方便你做自定义实现,以供不同情况下的扩展。
# OF DataAccess用法
## 一、 配置文件
### 1. 配置文件的路径
(1)默认情况:在系统执行目录下创建一个叫Configuration的目录,再在该目录下创建一个叫DB的子目录,即:Configuration\DB,然后DA所有的配置文件都放在此子目录下。
(2)自定义目录:在App.config(winform)或者web.config(Web)的AppSettings下增加自定义节点:<add key="DBConfigFolder" value="MyConfig/DB"/>,key固定为DBConfigFolder,value支持相对路径和绝对路径,示例"MyConfig/DB"就是相对路径(系统执行目录下),如果value设置为"c:\dbconfig"这样即为绝对路径。
### 2. 配置文件说明
> 配置文件主要包括三种配置文件:DB.config, SingleObjectDB.config, 和一系列的SQL脚本配置文件。
>* DB.Config是配置数据库连接方面的基本信息,以及对SQL脚本配置文件的注册;
>* SingleObjectDB.config是针对单体对象(对应一个数据表)做的配置,如果你要用到DAO中的关于单体对象的处理,那么需要在这里配置该对象的数据库相关信息;
>* SQL脚本.config,是存放SQL脚本的配置文件,建议在DB的子目录下再按照业务分目录管理。
(1) DB.config 文件示例及说明:
```xml
TestDB\SQLServer_Test.config
LogDB\Log.config
```
(2) SingleObjectDB.config 文件示例及说明:
```xml
```
(3)SQL脚本.config 文件示例及说明:
```xml
@InDate;
]]>
and r.indate>@start ?> and r.indate<@end ?> ]}
#SORT{[ Order By c.SysNo ]}
]]>
```
## 二、 OF DataAccess用法
OF DataAccess的Assembly为OF.Lib.DataAccess,所有的调用均从DAO这个类发起,DAO类提供了一系列的静态方法供业务层直接使用。由于OF DA采用了Dapper作为底层ORM内核,因此拥有一些Dapper的调用特性。
### **DAO提供了三大类静态方法:**
### **1. 基于单个对象(SingleObject)的DAO方法说明:**
基于单个对象(SingleObject)内部自动生成SQL脚本的简单CURD方法及ORM处理方法,方法名均以SO_开头,不支持分页查询;在更新、获取、删除方法中,支持以拉姆达表达式的形式设置条件。
#### (1) SO_Insert方法:单个对象(SignleObject)的数据插入,提供两个重载,一个是返回执行成功的条数,一个是返回创建成功后该数据的主键。
>>* int SO_Insert(object dataParameter, string excludeProperties, IDbTransaction transaction = null)
>>* PK SO_Insert(object dataParameter, string excludeProperties, IDbTransaction transaction = null)
>>* 入参说明:
\* T:泛型,数据对象类型;
\* dataParameters:数据实体,可以是T类型的实体,也可以是dynamic对象;
\* excludeProperties:需要排除Insert的属性名称,多个用半角逗号分隔,忽略大小写;在创建时通常需要排除自增量的主键属性;
\* transaction:事务对象。
>* 示例代码:
```cs
int count = DAO.SO_Insert(new
{
Name = "张三",
LoginId = "so1",
CommonStatus = CommonStatus.Actived
}
, null);
int sysNo = DAO.SO_Insert(new
{
Name = "李四",
LoginId = "so2",
CommonStatus = CommonStatus.Actived
}, null);
```
> * 批量插入实例代码:
```cs
List