mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-03 15:00:53 +08:00
Page:
ADO
Pages
ADO
AOP
API
BaseEntity
Cascade Deletion
Cascade Saving
CodeFirst
DI UnitOfWorkManager
Dapper比较
DbContext
DbFirst
Delete Data
Dynamic Operations
Entity Relationship
EntityFramework比较
FluentApi
Getting Started
Greed Loading
Group Aggregation Query
Home
Import Entity Configuration from Database
Insert Data
Insert or Update
Install
Lazy Loading
Linq to Sql
LinqToSql
Nested Query
Pagination
Parent Child Relationship Query
Query Data
Query from Multi Tables
Query from Single Table
Repository Layer
Repository
Return Data
Unit of Work
Update Data
With Sql
withsql
事务
修改
入门
分组聚合查询
分表分库
分页查询
删除
动态操作
单表查询
多表查询
安装
实体关系
实体特性
导入数据库特性
嵌套查询
工作单元
常见问题
延时加载
性能
支持我们
更新日志
查询
查询父子关系
添加
添加或修改
租户
类型映射
联合查询
联级保存
联级删除
聚合根(实验室)
自定义特性
表达式函数
读写分离
贪婪加载
过滤器
返回数据
首页
骚操作
Clone
Table of Contents
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Ado 是 IFreeSql 下重要的对象之一,它包括所有对 SQL 操作的封装,提供 ExecuteReader、ExecuteDataSet、ExecuteDataTable、ExecuteNonQuery、ExecuteScalar 等方法,使用起来和传统 SqlHelper 一样。
查询 SQL 返回实体
//返回多条记录
List<T> list = fsql.Ado.Query<T>("select * from t1");
//返回单条记录
T item = fsql.Ado.QuerySingle<T>("select * from t1 where id = @id", new { id = 1 });
//返回多个结果集
var result = fsql.Ado.Query<T1, T2>("select * from t1; select * from t2");
List<T1> list1 = result.Item1;
List<T2> list2 = result.Item2;
//like 查询
string searchText = "abc";
List<T> users = _fsql.Ado.Query<T>("select * from t1 where name like @name", new { name = "%" + searchText + "%" });
//SELECT now(), utc_timestamp()
var result = fsql.Ado.QuerySingle(() => new
{
DateTime.Now,
DateTime.UtcNow
});
参数化
Ado 下面所有参数 object parms 都可以接受匿名对象,或者字典:
- new { id = 1, name = "xx" }
- new Dictionary<string, object> { ["id"] = 1, ["name"] = "xx" }
关于参数前缀:
- odbc 是 ? 并且没有标识,所以freesql禁用了 odbc 参数化
- oracle 是 :
- mysql.data 是 ?
- mysqlconnector 是 @
- 其他基本都是 @
IN 参数化查询:
当前仅支持Array和IList类型绑定
var ids = new int[] { 1,2,3 };
List<T> list = fsql.Ado.Query<T>("select * from t1 where id in @ids", new { ids = ids });
检测连接
bool isok = fsql.Ado.ExecuteConnectTest();
CommandFluent
fsql.Ado 重载方法太多的情况下,建议使用 CommandFluent,例如存储过程:
DbParameter p2 = null;
fsql.Ado.CommandFluent("dbo.GetICMaxNum")
.CommandType(CommandType.StoredProcedure)
.CommandTimeout(60)
.WithParameter("TableName", "tb1")
.WithParameter("FInterID", null, p =>
{
//(p as OracleParameter).OracleType = ...;
p2 = p; //Output 参数
p.DbType = DbType.Int32;
p.Direction = ParameterDirection.Output;
})
.ExecuteNonQuery(); //.Query<T>() 或者 .ExecuteDataTable() 或者 ...
Console.WriteLine(p2.Value);
Oracle 存储过程获取 DataTable:
OracleParameter p2 = null;
var dt = fsql.Ado.CommandFluent("getTableInfo")
.CommandType(CommandType.StoredProcedure)
.CommandTimeout(60)
.WithParameter("out_var", null, p =>
{
p2 = p as OracleParameter;
p2.OracleDbType = OracleDbType.RefCursor;
p2.Direction = ParameterDirection.Output;
})
.ExecuteDataTable();
Console.WriteLine(dt.Rows.Count);
Ado.net 扩展方法
提供了类似 Dapper 的使用方法,FreeSql 增加了 IDbConnection/IDbTransaction 对象的扩展方法 Select/Insert/Update/Delete 实现 CRUD。
using FreeSql;
using (var conn = new SqlConnection(...))
{
//IFreeSql fsql = conn.GetIFreeSql();
//fsql.CodeFirst.IsNoneCommandParameter = true;
//fsql.CodeFirst.IsSyncStructureToUpper = true;
//fsql.Aop.CommandBefore += (_, e) => Trace.WriteLine(e.Command.CommandText);
//以上整个程序只需要设置一次
conn.Select<T>().Where(...).ToList();
conn.Insert(new T {}).ExecuteAffrows();
conn.Update().SetSource(new T {}).ExecuteAffrows();
conn.InsertOrUpdate().SetSource(new T {}).ExecuteAffrows();
conn.Delete<T>().Where(...).ExecuteAffrows();
}
- 每个 SqlConnection GetFreeSql() 返回的 IFreeSql 实例相同;
- 可以对 fsql 设置 Aop 事件,比如监视 SQL;
- IFreeSql 自身的成员 IDbFirst、Transaction 不可用;
利用本功能可以快速将 FreeSql 使用到项目中,只需要处理好实体类的特性。
提示:FreeSql 兼容 EFCore 99% 的实体特性
Basic
- 入门 Getting Started
- 安装 How to Install
- 添加 Insert Data
- 删除 Delete Data
- 修改 Update Data
- 添加或修改 Insert or Update ✨
- 查询 Query Data
- 仓储层 Repository Layer
- CodeFirst
- DbFirst
- 表达式函数
- 事务
- 过滤器
- ADO
- AOP✨
- 读写分离
- 分表分库
- 租户
- 性能
- 动态操作 Dynamic Operations
- 你不知道的功能✨
- API参考