mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-25 01:30:57 +08:00
update
55
骚操作.md
55
骚操作.md
@@ -37,7 +37,33 @@ repo.InsertOrUpdate(实体);
|
||||
|
||||
---
|
||||
|
||||
# 4、WithSql
|
||||
## 4、弱类型 CURD
|
||||
|
||||
```c#
|
||||
fsql.Insert<object>().AsType(实体类型)
|
||||
.AppendData(data)
|
||||
.ExecuteAffrows();
|
||||
|
||||
fsql.Update<object>().AsType(实体类型)
|
||||
.SetSource(data)
|
||||
.ExecuteAffrows();
|
||||
|
||||
fsql.Select<object>().AsType(实体类型)
|
||||
.Where(a => (a as BaseEntity).Id == 1)
|
||||
.ExecuteAffrows();
|
||||
|
||||
//或者仓储
|
||||
var repo = fsql.GetRepository<object>();
|
||||
repo.AsType(实体类型);
|
||||
|
||||
repo.Insert(..);
|
||||
repo.Update(..);
|
||||
repo.Delete(..);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 5、WithSql
|
||||
```csharp
|
||||
fsql.Select<Topic>()
|
||||
.WithSql("select * from Topic where clicks > @val", new { val = 10 })
|
||||
@@ -51,7 +77,7 @@ fsql.Select<Topic>()
|
||||
|
||||
---
|
||||
|
||||
# 5、你不知道的,指定字段返回
|
||||
# 6、你不知道的,指定字段返回
|
||||
|
||||
```csharp
|
||||
fsql.Select<t1>()
|
||||
@@ -73,7 +99,7 @@ fsql.Select<t1>()
|
||||
|
||||
---
|
||||
|
||||
# 6、Dto 映射查询
|
||||
# 7、Dto 映射查询
|
||||
|
||||
映射查询支持单表/多表,在查询数据之前映射(不是先查询所有字段再到内存映射)
|
||||
|
||||
@@ -117,7 +143,7 @@ fsql.Select<Song>().ToList(a => new Song(a.id) { xxx = a.ext })
|
||||
|
||||
---
|
||||
|
||||
# 7、父子关系表
|
||||
# 8、父子关系表
|
||||
|
||||
```csharp
|
||||
List<Category> t2 = fsql.Select<Category>.ToTreeList();
|
||||
@@ -145,7 +171,7 @@ Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
```
|
||||
|
||||
# 8、级联加载
|
||||
# 9、级联加载
|
||||
|
||||
有设置导航属性关系的(支持一对多、多对多):
|
||||
|
||||
@@ -190,7 +216,7 @@ fsql.Select<Tag>().IncludeMany(a => a.Goods.Select(b => new Goods { Id = b.Id, T
|
||||
|
||||
---
|
||||
|
||||
# 9、WhereCascade
|
||||
# 10、WhereCascade
|
||||
|
||||
多表查询时,像isdeleted每个表都给条件,挺麻烦的。WhereCascade使用后生成sql时,所有表都附上这个条件。
|
||||
|
||||
@@ -216,7 +242,7 @@ WHERE t1.IsDeleted = 0
|
||||
|
||||
---
|
||||
|
||||
# 10、WhereDynamicFilter
|
||||
# 11、WhereDynamicFilter
|
||||
|
||||
ISelect.WhereDynamicFilter 方法实现动态过滤条件(与前端交互),支持的操作符:
|
||||
|
||||
@@ -227,6 +253,7 @@ ISelect.WhereDynamicFilter 方法实现动态过滤条件(与前端交互)
|
||||
- Range:范围查询
|
||||
- DateRange:日期范围,有特殊处理 value\[1\] + 1
|
||||
- Any/NotAny:是否符合 value 中任何一项(直白的说是 SQL IN)
|
||||
- Custom:自定义解析
|
||||
|
||||
```csharp
|
||||
DynamicFilterInfo dyfilter = JsonConvert.DeserializeObject<DynamicFilterInfo>(@"
|
||||
@@ -253,7 +280,7 @@ fsql.Select<VM_District_Parent>().WhereDynamicFilter(dyfilter).ToList();
|
||||
|
||||
---
|
||||
|
||||
# 11、ISelect.ToDelete、ISelect.ToUpdate
|
||||
# 12、ISelect.ToDelete、ISelect.ToUpdate
|
||||
|
||||
默认 IDelete 不支持导航对象,多表关联等。ISelect.ToDelete 可将查询转为删除对象,以便支持导航对象或其他查询功能删除数据,如下:
|
||||
|
||||
@@ -275,7 +302,7 @@ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1i
|
||||
|
||||
---
|
||||
|
||||
# 12、保存多对多数据 SaveMany
|
||||
# 13、保存多对多数据 SaveMany
|
||||
|
||||
之前:
|
||||
|
||||
@@ -319,7 +346,7 @@ SaveMany【多对多】的机制规则与联级保存的一样,如下:
|
||||
|
||||
---
|
||||
|
||||
# 13、自定义表达式函数
|
||||
# 14、自定义表达式函数
|
||||
|
||||
```csharp
|
||||
[ExpressionCall]
|
||||
@@ -358,7 +385,7 @@ var sql1 = fsql.Select<SysModule>()
|
||||
|
||||
---
|
||||
|
||||
# 14、自定义实体特性、与其他 ORM 共用特性
|
||||
# 15、自定义实体特性、与其他 ORM 共用特性
|
||||
|
||||
本功能可实现与其他 ORM 使用一套 Attribute,避免维护两份实体特性的烦恼:
|
||||
|
||||
@@ -400,7 +427,7 @@ class MyColumnAttribute : Attribute {
|
||||
|
||||
---
|
||||
|
||||
# 15、审计 CURD
|
||||
# 16、审计 CURD
|
||||
|
||||
如果因为某个 sql 骚操作耗时很高,没有一个相关的审计功能,排查起来可以说无从下手。
|
||||
|
||||
@@ -421,7 +448,7 @@ fsql.Aop.CurdAfter += (s, e) => {
|
||||
|
||||
---
|
||||
|
||||
# 16、审计属性值
|
||||
# 17、审计属性值
|
||||
|
||||
实现插入/更新时统一处理某些值,比如某属性的雪花算法值、创建时间值、甚至是业务值。
|
||||
|
||||
@@ -446,7 +473,7 @@ class Order {
|
||||
|
||||
如果命名规范,可以在 aop 里判断,if (e.Property.Name == "createtime") e.Value = DateTime.Now;
|
||||
|
||||
# 17、Ado.Net 扩展方法
|
||||
# 18、Ado.Net 扩展方法
|
||||
|
||||
提供了类似 Dapper 的使用方法,FreeSql 增加了 IDbConnection/IDbTransaction 对象的扩展方法 Select/Insert/Update/Delete 实现 CRUD。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user