update

28810
2019-03-09 02:47:26 +08:00
parent 1bf281ea8b
commit 3383a2b4c7
3 changed files with 57 additions and 13 deletions

@@ -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虽然他们都为关系型数据库但各自有着独特的技术亮点有许多亮点值得我们使用

@@ -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

@@ -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)