mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-08 17:30:55 +08:00
Merge branch 'master' of https://github.com/dotnetcore/FreeSql.wiki
10
聚合根(实验室).md
10
聚合根(实验室).md
@@ -1,5 +1,7 @@
|
|||||||
FreeSql.Repository 定义了 IBaseRepository\<T\> 仓储接口,实现了单表的通用仓储对象,支持了级联保存、级联删除功能,(但是)使用时需要人工自己判断何时开启、何时使用。
|
FreeSql.Repository 定义了 IBaseRepository\<T\> 仓储接口,实现了单表的通用仓储对象,支持了级联保存、级联删除功能,(但是)使用时需要人工自己判断何时开启、何时使用。
|
||||||
|
|
||||||
|
本文看上去像 EF,实则有区别,主要区别在级联边界的规则设定,例如我们允许 OneToMany 从下层向上递归级联,但是仅限查询,不能增删改。研究目的希望从机制上杜绝痛点,让操作变得更可控。
|
||||||
|
|
||||||
**AggregateRootRepository 是 IBaseRepository\<T\> 一种新的尝试实现**,它将自动处理 OneToOne/OneToMany 导航属性,以及 ManyToMany(中间表) 的级联添加、级联更新、级联删除、级联查询(查询时自动 Include/IncludeMany 它们)。
|
**AggregateRootRepository 是 IBaseRepository\<T\> 一种新的尝试实现**,它将自动处理 OneToOne/OneToMany 导航属性,以及 ManyToMany(中间表) 的级联添加、级联更新、级联删除、级联查询(查询时自动 Include/IncludeMany 它们)。
|
||||||
|
|
||||||
> dotnet add package FreeSql.Extensions.AggregateRoot
|
> dotnet add package FreeSql.Extensions.AggregateRoot
|
||||||
@@ -14,17 +16,17 @@ var repository = fsql.GetAggregateRootRepository<Order>();
|
|||||||
|
|
||||||
将一个主要的实体类认定为聚合根,设定好安全的管辖范围(边界),CRUD 时会把边界之内的所有内容看作一个整体。
|
将一个主要的实体类认定为聚合根,设定好安全的管辖范围(边界),CRUD 时会把边界之内的所有内容看作一个整体。
|
||||||
|
|
||||||
`增删改` 边界之外的导航属性,向下递归时会忽略:
|
`增删改` 边界之外的导航属性,递归时会忽略:
|
||||||
- ManyToOne
|
- ManyToOne
|
||||||
- ManyToMany(外部表)
|
- ManyToMany(外部表)
|
||||||
- PgArrayToMany
|
- PgArrayToMany
|
||||||
|
|
||||||
`增删改` 边界之内的导航属性,向下递归时会级联操作:
|
`增删改` 边界之内的导航属性,递归时会级联操作:
|
||||||
- OneToOne
|
- OneToOne
|
||||||
- OneToMany
|
- OneToMany
|
||||||
- ManyToMany(中间表)
|
- ManyToMany(中间表)
|
||||||
|
|
||||||
示例1:在聚合根内递归向下的所有 OneToOne/OneToMany 导航属性
|
示例1:在聚合根内递归所有 OneToOne/OneToMany 导航属性
|
||||||
|
|
||||||
- OneToOne: Order <-> OrderExt
|
- OneToOne: Order <-> OrderExt
|
||||||
- OneToMany: Order <== OrderDetail
|
- OneToMany: Order <== OrderDetail
|
||||||
@@ -70,7 +72,7 @@ class OrderDetailExt
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
示例2:在聚合根内递归向下的所有 ManyToMany 导航属性对应的中间表
|
示例2:在聚合根内递归所有 ManyToMany 导航属性对应的中间表
|
||||||
|
|
||||||
- ManyToMany: Order <=> Tag
|
- ManyToMany: Order <=> Tag
|
||||||
- 聚合根 Order 会根据 Tags 生成 OrderTag 中间表数据,进行管理
|
- 聚合根 Order 会根据 Tags 生成 OrderTag 中间表数据,进行管理
|
||||||
|
|||||||
Reference in New Issue
Block a user