update

28810
2019-11-21 20:23:06 +08:00
parent 3b77d0531a
commit b10b796cb3
2 changed files with 13 additions and 9 deletions

@@ -26,13 +26,15 @@ var repo = fsql.GetRepository<T>();
repo.DbContextOptions.EnableAddOrUpdateNavigateList = false;
```
# SaveManyToMany
# SaveMany
保存实体的指定【多对多】导航属性SaveManyToMany 方法实现在 BaseRepository、DbContext。
保存实体的指定【一对多】、【多对多】导航属性SaveMany 方法实现在 BaseRepository、DbContext。
解决问题:当实体类导航数据过于复杂的时候,选择关闭联级保存的功能是明智之选,但是此时【多对多】数据保存功能写起来非常繁琐麻烦(与现有数据对比后保存)。
解决问题:当实体类导航数据过于复杂的时候,选择关闭联级保存的功能是明智之选,但是此时【一对多】、【多对多】数据保存功能写起来非常繁琐麻烦(与现有数据对比后保存)。
机制规则与联级保存的【多对多】一样
SaveMany【一对多】的机制是完整对比保存
SaveMany【多对多】的机制规则与联级保存的一样。
![image](https://user-images.githubusercontent.com/16286519/68963289-8cec8b00-0811-11ea-9a4f-12b07544e67f.png)

@@ -185,7 +185,7 @@ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1i
---
# 10、保存多对多数据 SaveManyToMany
# 10、保存多对多数据 SaveMany
之前:
@@ -205,9 +205,9 @@ repo.DbContextOptions.EnableAddOrUpdateNavigateList = false;
### 本功能:
保存实体的指定【多对多】导航属性SaveManyToMany 方法实现在 BaseRepository、DbContext。
保存实体的指定【一对多】、【多对多】导航属性SaveMany 方法实现在 BaseRepository、DbContext。
解决问题:当实体类导航数据过于复杂的时候,选择关闭联级保存的功能是明智之选,但是此时【多对多】数据保存功能写起来非常繁琐麻烦(因为要与现有数据对比后保存)。
解决问题:当实体类导航数据过于复杂的时候,选择关闭联级保存的功能是明智之选,但是此时【一对多】、【多对多】数据保存功能写起来非常繁琐麻烦(与现有数据对比后保存)。
```csharp
var song = new Song { Id = 1 };
@@ -215,11 +215,13 @@ song.Tags = new List<Tag>();
song.Tags.Add(new Tag ...);
song.Tags.Add(new Tag ...);
song.Tags.Add(new Tag ...);
repo.SaveManyToMany(song, "Tags");
repo.SaveMany(song, "Tags");
//轻松保存 song 与 tag 表的关联
```
机制规则与联级保存的【多对多】一样,如下:
SaveMany【一对多】的机制是完整对比保存。
SaveMany【多对多】的机制规则与联级保存的一样如下
我们对中间表的保存是完整对比操作,对外部实体的操作只作新增(注意不会更新)
- 属性集合为空时,删除他们的所有关联数据(中间表)