update

28810
2020-04-20 07:52:57 +08:00
parent 34fa2e4833
commit b71f582d9c

@@ -128,27 +128,12 @@ var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_{Da
## 兼容问题
FreeSql 支持多种数据库,分别为 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/MsAccess虽然他们都为关系型数据库但各自有着独特的技术亮点有许多亮点值得我们使用
SqlServer 提供的 output inserted 特性,在表使用了自增或数据库定义了默认值的时候,使用它可以快速将 insert 的数据返回。PostgreSQL 也有相应的功能,如此方便但不是每个数据库都支持。
比如 SqlServer 提供的 output inserted 特性,在表使用了自增或数据库定义了默认值的时候,使用它可以快速将 insert 的数据返回。PostgreSQL 也有相应的功能,如此方便但不是每个数据库都支持。
IRepository 接口定义:
```csharp
TEntity Insert(TEntity entity);
Task<TEntity> InsertAsync(TEntity entity);
```
于是我们做了两种仓库层实现:
- BaseRepository 采用 ExecuteInserted 执行;
- GuidRepository 采用 ExecuteAffrows 执行(兼容性好);
当采用了不支持的数据库时Sqlite/MySql/Oracle建议
并且采用了不支持该特性的数据库Sqlite/MySql/Oracle/达梦/MsAccess并且实体使用了自增属性仓储批量插入将变为逐条执行可以考虑以下改进
* 使用 uuid 作为主键(即 Guid
* 避免使用数据库的默认值功能;
* 仓储层实现请使用 GuidRepository
## 联级保存