mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-10 10:20:55 +08:00
update
@@ -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;
|
||||
|
||||
## 联级保存
|
||||
|
||||
|
||||
Reference in New Issue
Block a user