mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-04 23:40:53 +08:00
update
2
AOP.md
2
AOP.md
@@ -135,6 +135,6 @@ fsql.Aop.ParseExpression += (s, e) => {
|
||||
* [《CodeFirst模式之四:类型映射》](https://github.com/2881099/FreeSql/wiki/%e7%b1%bb%e5%9e%8b%e6%98%a0%e5%b0%84)
|
||||
* [《CodeFirst模式之五:迁移结构》](https://github.com/2881099/FreeSql/wiki/CodeFirst#%e8%bf%81%e7%a7%bb%e7%bb%93%e6%9e%84)
|
||||
- [《DbFirst模式开发介绍》](https://github.com/2881099/FreeSql/wiki/DbFirst)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
@@ -272,7 +272,7 @@ DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
|
||||
2
Home.md
2
Home.md
@@ -53,7 +53,7 @@ FreeSql是一个功能强大的 .NET ORM 功能库,支持 .NetFramework 4.0+
|
||||
* [过滤器](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
* [AOP✨](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
* [读写分离](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
* [分区分表](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
* [分库分表](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
* [租户](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
* [性能](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
* [*你不知道的功能✨*](https://github.com/2881099/FreeSql/wiki/%E9%AA%9A%E6%93%8D%E4%BD%9C)
|
||||
|
||||
@@ -182,7 +182,7 @@ SqlServer 提供的 output inserted 特性,在表使用了自增或数据库
|
||||
- [《学习FreeSql之四:查询数据》](https://github.com/2881099/FreeSql/wiki/%e6%9f%a5%e8%af%a2)
|
||||
- [《优化之:延时加载》](https://github.com/2881099/FreeSql/wiki/%e5%bb%b6%e6%97%b6%e5%8a%a0%e8%bd%bd)
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
* [过滤器](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
* [AOP✨](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
* [读写分离](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
* [分区分表](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
* [分库分表](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
* [租户](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
* [性能](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
* [*你不知道的功能✨*](https://github.com/2881099/FreeSql/wiki/%E9%AA%9A%E6%93%8D%E4%BD%9C)
|
||||
|
||||
2
事务.md
2
事务.md
@@ -153,7 +153,7 @@ using (var uowManager = new UnitOfWorkManager(fsql)) //使用 UnitOfWorkManager
|
||||
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
|
||||
109
分区分表.md
109
分区分表.md
@@ -1,109 +0,0 @@
|
||||
## 分区
|
||||
|
||||
分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同。
|
||||
|
||||
与分表不同,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加数据库的性能。
|
||||
|
||||
分区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开发代码端来说是透明。
|
||||
|
||||
postgresql10以上的自动分区分表功能:
|
||||
|
||||
1、首先创建主分区表:
|
||||
```sql
|
||||
create table fenbiao(
|
||||
id int,
|
||||
year varchar
|
||||
) partition by list(year)
|
||||
```
|
||||
|
||||
这里设置的是根据year列进行数据分表;创建后使用navicat是看不到的;
|
||||
|
||||
2.创建分表:
|
||||
```sql
|
||||
create table fenbiao_2017 partition of fenbiao for values in ('2017');
|
||||
create table fenbiao_2018 partition of fenbiao for values in ('2018');
|
||||
```
|
||||
|
||||
这样这两天数据会依靠规则插入到不同分表中,如果插入一条不符合规则的数据,则会报错误:no partition of relation "fenbiao" found for row.
|
||||
|
||||
## 分表
|
||||
|
||||
分表从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表。分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。
|
||||
|
||||
分表后单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同 的查询,将并发压力分到不同的小表里面。
|
||||
|
||||
## 分库分表
|
||||
|
||||
分库分表把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
|
||||
|
||||
数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
|
||||
|
||||
## FreeSql.Repository 分表
|
||||
|
||||
FreeSql 提供 AsTable 分表的基础方法,GuidRepository 作为分存式仓储将实现了分表与分库(不支持跨服务器分库)的封装。
|
||||
|
||||
```csharp
|
||||
var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_201903");
|
||||
```
|
||||
|
||||
上面我们得到一个日志仓储按年月分表,使用它 CURD 最终会操作 Log_201903 表。
|
||||
|
||||
注意事项:
|
||||
|
||||
* v0.11.12以后的版本可以使用 CodeFirst 迁移分表;
|
||||
* 不可在分表分库的实体类型中使用《延时加载》;
|
||||
|
||||
## 跨表查询
|
||||
|
||||
```csharp
|
||||
var sql = fsql.Select<User>()
|
||||
.AsTable((type, oldname) => "table_1")
|
||||
.AsTable((type, oldname) => "table_2")
|
||||
.AsTable((type, oldname) => "table_3")
|
||||
.ToSql(a => a.Id);
|
||||
```
|
||||
|
||||
得到SQL:
|
||||
```sql
|
||||
select * from (SELECT a."Id" as1 FROM "table_1" a) ftb
|
||||
UNION ALL
|
||||
select * from (SELECT a."Id" as1 FROM "table_2" a) ftb
|
||||
UNION ALL
|
||||
select * from (SELECT a."Id" as1 FROM "table_3" a) ftb
|
||||
```
|
||||
|
||||
多表查询:
|
||||
```csharp
|
||||
var sql = fsql.Select<User>().LeftJoin<UserGroup>((a,b) => a.UserGroupId == b.Id)
|
||||
.AsTable((type, oldname) => oldname + "_1")
|
||||
.AsTable((type, oldname) => oldname + "_2")
|
||||
.AsTable((type, oldname) => oldname + "_3")
|
||||
.ToSql(a => a.Id);
|
||||
```
|
||||
|
||||
> 期待更多发散。。。
|
||||
|
||||
## 巧用AsTable
|
||||
```csharp
|
||||
var sql = fsql.Select<User>()
|
||||
.AsTable((a, b) => "(select * from tb_topic where clicks > 10)")
|
||||
.Page(1, 10).ToList()
|
||||
```
|
||||
> v1.0.1 ISelect 增加 WithSql("select * from user ...") 功能快速代理此方法
|
||||
|
||||
## 分库跨库
|
||||
|
||||
参数资料:[https://github.com/dotnetcore/FreeSql/issues/44](https://github.com/dotnetcore/FreeSql/issues/44)
|
||||
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
- [《UnitOfWork》](https://github.com/2881099/FreeSql/wiki/%e5%b7%a5%e4%bd%9c%e5%8d%95%e5%85%83)
|
||||
- [《学习FreeSql之一:添加数据》](https://github.com/2881099/FreeSql/wiki/%e6%b7%bb%e5%8a%a0)
|
||||
- [《学习FreeSql之二:删除数据》](https://github.com/2881099/FreeSql/wiki/%e5%88%a0%e9%99%a4)
|
||||
- [《学习FreeSql之三:修改数据》](https://github.com/2881099/FreeSql/wiki/%e4%bf%ae%e6%94%b9)
|
||||
- [《优化之:延时加载》](https://github.com/2881099/FreeSql/wiki/%e5%bb%b6%e6%97%b6%e5%8a%a0%e8%bd%bd)
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
129
分库分表.md
Normal file
129
分库分表.md
Normal file
@@ -0,0 +1,129 @@
|
||||
## 理论知识
|
||||
|
||||
分表 - 从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表。分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。分表后单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同 的查询,将并发压力分到不同的小表里面。
|
||||
|
||||
分库 - 把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
|
||||
|
||||
## 分表 AsTable
|
||||
|
||||
FreeSql 原生用法、FreeSql.Repository 仓储用法 都提供了 AsTable 方法对分表进行 CRUD 操作,例如:
|
||||
|
||||
```c#
|
||||
var repo = fsql.GetRepository<Log>();
|
||||
repo.AsTable(_ => $"{oldname}_201903"); //对 Log_201903 表 CRUD
|
||||
|
||||
repo.Insert(new Log { ... });
|
||||
```
|
||||
|
||||
跨库,但是在同一个数据库服务器下,也可以使用 AsTable(_ => $"db2.dbo.{oldname}_201903")
|
||||
|
||||
```csharp
|
||||
//跨表查询
|
||||
var sql = fsql.Select<User>()
|
||||
.AsTable((type, oldname) => "table_1")
|
||||
.AsTable((type, oldname) => "table_2")
|
||||
.ToSql(a => a.Id);
|
||||
|
||||
//select * from (SELECT a."Id" as1 FROM "table_1" a) ftb
|
||||
//UNION ALL
|
||||
//select * from (SELECT a."Id" as1 FROM "table_2" a) ftb
|
||||
```
|
||||
|
||||
分表总结:
|
||||
|
||||
- 分表、相同服务器跨库 可以使用 AsTable 进行 CRUD;
|
||||
- AsTable CodeFirst 会自动创建不存在的分表;
|
||||
- 不可在分表分库的实体类型中使用《延时加载》;
|
||||
|
||||
## 分库 IdleBus
|
||||
|
||||
IFreeSql 对应一个数据库,分库是不是要定义N个 IFreeSql?分库的租户场景,那不要定义10000个?
|
||||
|
||||
IdleBus 空闲对象管理容器,有效组织对象重复利用,自动创建、销毁,解决【实例】过多且长时间占用的问题。有时候想做一个单例对象重复使用提升性能,但是定义多了,有的又可能一直空闲着占用资源。专门解决:又想重复利用,又想少占资源的场景。https://github.com/2881099/IdleBus
|
||||
|
||||
> dotnet add package IdleBus
|
||||
|
||||
```csharp
|
||||
static IdleBus<IFreeSql> ib = new IdleBus<IFreeSql>(TimeSpan.FromMinutes(10));
|
||||
|
||||
ib.Register("db1", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, "str1").Build());
|
||||
ib.Register("db2", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, "str2").Build());
|
||||
ib.Register("db3", () => new FreeSqlBuilder().UseConnectionString(DataType.SqlServer, "str3").Build());
|
||||
//...注册很多个
|
||||
|
||||
ib.Get("db1").Select<T>().Limit(10).ToList();
|
||||
```
|
||||
IdleBus 也是【单例】设计!主要的两个方法,注册,获取。使用 IdleBus 后应需要弱化 IFreeSql 的存在。
|
||||
|
||||
```csharp
|
||||
public static class IdleBusExtesions
|
||||
{
|
||||
static AsyncLocal<string> asyncLocalTenantId = new AsyncLocal<string>();
|
||||
public static IdleBus<IFreeSql> ChangeTenant(this IdleBus<IFreeSql> ib, string tenantId)
|
||||
{
|
||||
asyncLocalTenantId.Value = tenantId;
|
||||
return ib;
|
||||
}
|
||||
public static IFreeSql Get(this IdleBus<IFreeSql> ib) => ib.Get(asyncLocalTenantId.Value ?? "db1");
|
||||
public static IBaseRepository<T> GetRepository<T>(this IdleBus<IFreeSql> ib) where T : class => ib.Get().GetRepository<T>();
|
||||
|
||||
//-------------------------------------------------------
|
||||
|
||||
static void test()
|
||||
{
|
||||
IdleBus<IFreeSql> ib = null; //单例注入
|
||||
|
||||
var fsql = ib.Get(); //获取当前租户对应的 IFreeSql
|
||||
|
||||
var fsql00102 = ib.ChangeTenant("00102").Get(); //切换租户,后面的操作都是针对 00102
|
||||
|
||||
var songRepository = ib.GetRepository<Song>();
|
||||
var detailRepository = ib.GetRepository<Detail>();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------
|
||||
|
||||
public static IServiceCollection AddIdleBusRepository(this IServiceCollection services, IdleBus<IFreeSql> ib, params Assembly[] assemblies)
|
||||
{
|
||||
services.AddSingleton(ib);
|
||||
services.AddScoped(typeof(IBaseRepository<>), typeof(YourDefaultRepository<>));
|
||||
services.AddScoped(typeof(BaseRepository<>), typeof(YourDefaultRepository<>));
|
||||
services.AddScoped(typeof(IBaseRepository<,>), typeof(YourDefaultRepository<,>));
|
||||
services.AddScoped(typeof(BaseRepository<,>), typeof(YourDefaultRepository<,>));
|
||||
|
||||
if (assemblies?.Any() == true)
|
||||
foreach (var asse in assemblies) //批量注册
|
||||
foreach (var repo in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a)))
|
||||
services.AddScoped(repo);
|
||||
return services;
|
||||
}
|
||||
}
|
||||
|
||||
class YourDefaultRepository<T> : BaseRepository<T> where T : class
|
||||
{
|
||||
public YourDefaultRepository(IdleBus<IFreeSql> ib) : base(ib.Get(), null, null) { }
|
||||
}
|
||||
class YourDefaultRepository<T, TKey> : BaseRepository<T, TKey> where T : class
|
||||
{
|
||||
public YourDefaultRepository(IdleBus<IFreeSql> ib) : base(ib.Get(), null, null) { }
|
||||
}
|
||||
```
|
||||
|
||||
分表总结:
|
||||
|
||||
- 跨库 可以使用 ib.Get() 获取 IFreeSql 进行 CRUD;
|
||||
- 跨库 事务不好处理,注意了;
|
||||
- 跨库 查询不好处理,注意了;
|
||||
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
- [《UnitOfWork》](https://github.com/2881099/FreeSql/wiki/%e5%b7%a5%e4%bd%9c%e5%8d%95%e5%85%83)
|
||||
- [《学习FreeSql之一:添加数据》](https://github.com/2881099/FreeSql/wiki/%e6%b7%bb%e5%8a%a0)
|
||||
- [《学习FreeSql之二:删除数据》](https://github.com/2881099/FreeSql/wiki/%e5%88%a0%e9%99%a4)
|
||||
- [《学习FreeSql之三:修改数据》](https://github.com/2881099/FreeSql/wiki/%e4%bf%ae%e6%94%b9)
|
||||
- [《优化之:延时加载》](https://github.com/2881099/FreeSql/wiki/%e5%bb%b6%e6%97%b6%e5%8a%a0%e8%bd%bd)
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
2
分页查询.md
2
分页查询.md
@@ -59,4 +59,4 @@ SqlServer 2012+ 版本,使用最新的 fetch next rows 分页;
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
|
||||
2
单表查询.md
2
单表查询.md
@@ -60,5 +60,5 @@ fsql.Select<Topic>()
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
2
多表查询.md
2
多表查询.md
@@ -219,5 +219,5 @@ WHERE t1.IsDeleted = 0
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
2
安装.md
2
安装.md
@@ -59,7 +59,7 @@ FreeSql 除了支持基本的增删查改功能外,还支持基于现有数据
|
||||
|
||||
- [《数据库事务》](https://github.com/2881099/FreeSql/wiki/%e4%ba%8b%e5%8a%a1)
|
||||
- [《使用读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《返回数据》](https://github.com/2881099/FreeSql/wiki/%e8%bf%94%e5%9b%9e%e6%95%b0%e6%8d%ae)
|
||||
- [《优化之:延时加载》](https://github.com/2881099/FreeSql/wiki/%e5%bb%b6%e6%97%b6%e5%8a%a0%e8%bd%bd)
|
||||
|
||||
2
工作单元.md
2
工作单元.md
@@ -120,7 +120,7 @@ DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,
|
||||
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
|
||||
2
性能.md
2
性能.md
@@ -204,7 +204,7 @@ public void QueryList() {
|
||||
|
||||
- [《数据库事务》](https://github.com/2881099/FreeSql/wiki/%e4%ba%8b%e5%8a%a1)
|
||||
- [《使用读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《返回数据》](https://github.com/2881099/FreeSql/wiki/%e8%bf%94%e5%9b%9e%e6%95%b0%e6%8d%ae)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
|
||||
2
查询.md
2
查询.md
@@ -13,7 +13,7 @@ FreeSql在查询数据下足了功夫,链式查询语法、多表查询、表
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
|
||||
## 特别介绍 WhereDynamicFilter
|
||||
|
||||
@@ -216,5 +216,5 @@ Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
2
添加.md
2
添加.md
@@ -177,7 +177,7 @@ fsql.Insert<Topic>().MySqlIgnoreInto().AppendData(items).ExecuteAffrows();
|
||||
- [《学习FreeSql之三:查询数据》](https://github.com/2881099/FreeSql/wiki/%e6%9f%a5%e8%af%a2)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
|
||||
## API
|
||||
|
||||
2
租户.md
2
租户.md
@@ -68,7 +68,7 @@ var reposTopic = orm.GetGuidRepository<Topic>(null, oldname => $"{oldname}{tenan
|
||||
|
||||
### 方案三:按租户分库
|
||||
|
||||
与方案二相同,只是表存储的位置不同,请查看 [《FreeSql.Repository 仓储》](https://github.com/2881099/FreeSql/wiki/Repository)、[《分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)。
|
||||
与方案二相同,只是表存储的位置不同,请查看 [《FreeSql.Repository 仓储》](https://github.com/2881099/FreeSql/wiki/Repository)、[《分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)。
|
||||
|
||||
### 多表查询
|
||||
|
||||
|
||||
2
读写分离.md
2
读写分离.md
@@ -39,7 +39,7 @@ fsql.Select<T>().Master().WhereId(a => a.Id == 1).ToOne(); //强制读【主库
|
||||
* [《CodeFirst模式之四:类型映射》](https://github.com/2881099/FreeSql/wiki/%e7%b1%bb%e5%9e%8b%e6%98%a0%e5%b0%84)
|
||||
* [《CodeFirst模式之五:迁移结构》](https://github.com/2881099/FreeSql/wiki/CodeFirst#%e8%bf%81%e7%a7%bb%e7%bb%93%e6%9e%84)
|
||||
- [《DbFirst模式开发介绍》](https://github.com/2881099/FreeSql/wiki/DbFirst)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
2
过滤器.md
2
过滤器.md
@@ -152,7 +152,7 @@ repo1.Select.ToSql()
|
||||
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《AOP》](https://github.com/2881099/FreeSql/wiki/AOP)
|
||||
- [《仓储层Repository》](https://github.com/2881099/FreeSql/wiki/Repository)
|
||||
- [《UnitOfWork》](https://github.com/2881099/FreeSql/wiki/%e5%b7%a5%e4%bd%9c%e5%8d%95%e5%85%83)
|
||||
|
||||
2
返回数据.md
2
返回数据.md
@@ -173,5 +173,5 @@ A, B, C 都有 id,Dto { id, a1, a2, b1, b2 },A.id 被映射。也可以指
|
||||
- [《优化之:贪婪加载》](https://github.com/2881099/FreeSql/wiki/%e8%b4%aa%e5%a9%aa%e5%8a%a0%e8%bd%bd)
|
||||
- [《Expression 表达式函数》](https://github.com/2881099/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)
|
||||
- [《性能》](https://github.com/2881099/FreeSql/wiki/%e6%80%a7%e8%83%bd)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e5%8c%ba%e5%88%86%e8%a1%a8)
|
||||
- [《分区、分表、分库》](https://github.com/2881099/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)
|
||||
- [《租户》](https://github.com/2881099/FreeSql/wiki/%e7%a7%9f%e6%88%b7)
|
||||
Reference in New Issue
Block a user