mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-10 02:10:55 +08:00
update
@@ -39,6 +39,31 @@ public class SongRepository : BaseRepository<Song, int> {
|
||||
}
|
||||
```
|
||||
|
||||
3、Autofac 注入;
|
||||
|
||||
```csharp
|
||||
public IServiceProvider ConfigureServices(IServiceCollection services) {
|
||||
|
||||
services.AddSingleton<IFreeSql>(fsql);
|
||||
services.AddMvc();
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
|
||||
builder.RegisterFreeGuidRepository<Song>(null, null);
|
||||
|
||||
builder.Populate(services);
|
||||
var container = builder.Build();
|
||||
|
||||
return new AutofacServiceProvider(container);
|
||||
}
|
||||
|
||||
//在控制器使用
|
||||
public SongsController(GuidRepository<Song> repos1, GuidRepository<xxxx> repos2) {
|
||||
}
|
||||
```
|
||||
|
||||
> Autofac 注入方式实现了全局【过滤与验证】、【分表分库】的设定,方便租户功能的设计;
|
||||
|
||||
## 过滤与验证
|
||||
|
||||
假设我们有User(用户)、Topic(主题)两个实体,在领域类中定义了两个仓储:
|
||||
@@ -73,6 +98,8 @@ var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_{Da
|
||||
* 不能使用 CodeFirst 迁移分表,开发环境时仍然可以迁移 Log 表;
|
||||
* 不可在分表分库的实体类型中使用《延时加载》;
|
||||
|
||||
##
|
||||
|
||||
## 兼容问题
|
||||
|
||||
FreeSql 支持五种数据库,分别为 MySql/SqlServer/PostgreSQL/Oracle/Sqlite,虽然他们都为关系型数据库,但各自有着独特的技术亮点,有许多亮点值得我们使用;
|
||||
|
||||
17
更新日志.md
17
更新日志.md
@@ -1,20 +1,11 @@
|
||||
|
||||
## v0.1.13
|
||||
|
||||
- 修改 连接池内部 Ping Timeout 值暂定 1秒;
|
||||
- 优化 初始化时若数据库超时,则放弃预热;
|
||||
- FreeSql.Repository 下增加 ISelect.FromRepository 扩展方法;比如分表实现租户:
|
||||
```csharp
|
||||
var tenantId = 1;
|
||||
var reposTopic = orm.GetGuidRepository<Topic>(null, oldname => $"{oldname}{tenantId}");
|
||||
var reposType = orm.GetGuidRepository<TopicType>(null, oldname => $"{oldname}{tenantId}");
|
||||
|
||||
//联表查询也支持
|
||||
reposTopic.Select
|
||||
.FromRepository(reposType) //合并两个仓储的设置
|
||||
.LeftJoin<TopicType>((a, b) => a.TypeId == b.Id)
|
||||
.ToList();
|
||||
```
|
||||
- 修改 连接池内部 Ping Timeout 值暂定 5秒;
|
||||
- 优化 初始化时若数据库超时,则放弃预热;
|
||||
- FreeSql.Repository 下增加 ISelect.FromRepository 扩展方法,实现分表的多表查询;
|
||||
- 增加 FreeSql.Repository Autofac 泛型注入,可利用实现全局过滤+分表分库;
|
||||
|
||||
## v0.1.12
|
||||
|
||||
|
||||
26
租户.md
26
租户.md
@@ -60,6 +60,32 @@ FROM "Topic_1" a
|
||||
LEFT JOIN "TopicType_1" b ON a."TypeId" = b."Id"
|
||||
```
|
||||
|
||||
### 实现全局控制租户
|
||||
|
||||
FreeSql.Repository Autofac 注入方式实现了全局【过滤与验证】、【分表分库】的设定,方便租户功能的设计;
|
||||
|
||||
```csharp
|
||||
public IServiceProvider ConfigureServices(IServiceCollection services) {
|
||||
|
||||
services.AddSingleton<IFreeSql>(fsql);
|
||||
services.AddMvc();
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
|
||||
builder.RegisterFreeGuidRepository<Song>(a => a.TenantId == 1, oldname => $"{oldname}_");
|
||||
|
||||
builder.Populate(services);
|
||||
var container = builder.Build();
|
||||
|
||||
return new AutofacServiceProvider(container);
|
||||
}
|
||||
|
||||
//在控制器使用
|
||||
public SongsController(GuidRepository<Song> repos1, GuidRepository<xxxx> repos2) {
|
||||
//repos1, repos2 都会附带注入时的 Filter 与 分表分库规则;
|
||||
}
|
||||
```
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [《读写分离》](https://github.com/2881099/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)
|
||||
|
||||
Reference in New Issue
Block a user