update

2881099
2022-05-04 18:47:18 +08:00
parent e1ee8eaabd
commit 187286389a
2 changed files with 70 additions and 0 deletions

@@ -170,6 +170,7 @@ SqlServer 提供的 output inserted 特性,在表使用了自增或数据库
| Delete | int | Lambda | 根据 lambda 条件删除数据 |
| Delete | int | TEntity | 删除数据 |
| Delete | int | IEnumerable\<TEntity\> | 批量删除数据 |
| DeleteCascade | List\<object\> | TEntity \| IEnumerable\<TEntity\> \| Lambda | 根据导航属性递归删除数据 |
| Insert | - | TEntity | 插入数据,若实体有自增列,插入后的自增值会填充到实体中 |
| Insert | - | IEnumerable\<TEntity\> | 批量插入数据 |
| Update | - | TEntity | 更新数据 |

@@ -95,6 +95,75 @@ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1i
- 删除前可预览测试数据,防止错误删除操作;
- 支持复杂的删除操作,例如:`ISelect` 上使用 `Limit(10)` 删除附合条件的前 10 条记录;
## IBaseRepository.DeleteCascade 级联删除
根据设置的导航属性,递归查询删除 OneToOne/OneToMany/ManyToMany 数据,并返回已删除的数据。
```c#
var repo = fsql.GetRepository<Group>();
repo.DbContextOptions.EnableAddOrUpdateNavigate = true;
var group = new UserGroup
{
GroupName = "group01",
Users = new List<User>
{
new User { Username = "admin01", Password = "pwd01", UserExt = new UserExt { Remark = "用户备注01" } },
new User { Username = "admin02", Password = "pwd02", UserExt = new UserExt { Remark = "用户备注02" } },
new User { Username = "admin03", Password = "pwd03", UserExt = new UserExt { Remark = "用户备注03" } },
}
};
repo.Insert(group);
//INSERT INTO "usergroup"("groupname") VALUES('group01') RETURNING "id"
//INSERT INTO "user"("username", "password", "groupid") VALUES('admin01', 'pwd01', 1), ('admin02', 'pwd02', 1), ('admin03', 'pwd03', 1) RETURNING "id" as "Id", "username" as "Username", "password" as "Password", "groupid" as "GroupId"
//INSERT INTO "userext"("userid", "remark") VALUES(3, '用户备注01'), (4, '用户备注02'), (5, '用户备注03')
var ret = repo.DeleteCascade(group);
//SELECT a."id", a."username", a."password", a."groupid" FROM "user" a WHERE (a."groupid" = 1)
//SELECT a."userid", a."remark" FROM "userext" a WHERE (a."userid" IN (3,4,5))
//DELETE FROM "userext" WHERE ("userid" IN (3,4,5))
//DELETE FROM "user" WHERE ("id" IN (3,4,5))
//DELETE FROM "usergroup" WHERE ("id" = 1)
//ret Count = 7 System.Collections.Generic.List<object>
// [0] {UserExt} object {UserExt}
// [1] {UserExt} object {UserExt}
// [2] {UserExt} object {UserExt}
// [3] {User} object {User}
// [4] {User} object {User}
// [5] {User} object {User}
// [6] {UserGroup} object {UserGroup}
public class Group
{
[Column(IsIdentity = true)]
public int Id { get; set; }
public string GroupName { get; set; }
[Navigate(nameof(User.GroupId))]
public List<User> Users { get; set; }
}
public class User
{
[Column(IsIdentity = true)]
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public int GroupId { get; set; }
[Navigate(nameof(Id))]
public UserExt UserExt { get; set; }
}
public class UserExt
{
[Column(IsPrimary = true)]
public int UserId { get; set; }
public string Remark { get; set; }
[Navigate(nameof(UserId))]
public User User { get; set; }
}
```
## 参考资料
- [《数据库事务》](%e4%ba%8b%e5%8a%a1)