Updated Cascade Saving (markdown)

2881099
2023-12-07 13:22:52 +08:00
parent 58dae9f0f6
commit 5b5f4eb5e5

@@ -1,12 +1,10 @@
[中文](%e8%81%94%e7%ba%a7%e4%bf%9d%e5%ad%98) | **English**
It is found that n to 1 is not suitable for cascade preservation. Save the type information when saving the topic? Personally, I think the bottom-up saving function is too uncontrollable. FreeSQL does not support bottom-up saving at present. Therefore, we will only talk about OneToOne/OneToMany/ManyToMany cascade save. As for manytoone cascade storage, manual processing is used, which is more safe and controllable.
In practice, it has been found that N-to-1 is not suitable for cascading saving, for example: when saving the Topic, do you also save the Category information? The function of saving from bottom to top is too uncontrollable. Therefore, the following will only discuss OneToOne/OneToMany/ManyToMany cascading saves.
## Savemany save manually
Save completely, compare the existing data in the table, and calculate the execution of addition, modification and deletion.
Recursive saving of navigation attributes is unsafe and uncontrollable. It is not a technical problem, but for security reasons. It provides a way to save navigation attributes manually and completely.
Completely save the specified navigation attributes, compare the existing data in the table, and calculate the execution of adding, modifying, and deleting.
```csharp
var repo = fsql.GetRepository<Type>();
@@ -24,14 +22,14 @@ repo.SaveMany(type, "Topics"); ////Manually and completely save topics
-SaveMany only supports onetomany and manytomany navigation properties
-Save only topics, not downward recursive tracing
-When topics is empty, delete all table data of topics existing in type, and confirm?
-The manytomany mechanism is to completely compare and save the intermediate table, and only append the external table without updating
-When Topics is Empty, delete all table data of Topics that exist for type
-ManyToMany compares and saves the intermediate table completely, and only appends and does not update the external table
For example:
-This table song
-External table tag
-Intermediate table Songtag
-This table Song
-External table Tag
-Intermediate table SongTag
## EnableCascadeSave warehouse cascade save
@@ -48,9 +46,9 @@ repo. DbContextOptions. EnableCascadeSave = true; // Manual opening required
repo. Insert(type);
```
-Do not delete the existing data in the topics sub table. Are you sure?
-When the topics attribute is empty, do not do anything. Confirm?
-When you save topics, you will also save the subordinate collection properties of topics \ [0 -.. \]. Go down to 18 layers and confirm?
-Do not delete data that already exists in the Topics subtable
-When the Topics attribute is Empty, no action is taken
-When saving Topics, the subordinate set properties of Topics \ [0-.. \] will also be saved, down 18 layers
>For example, in the [type] table, there is set attribute [article] below and set attribute [comment] below [article].
@@ -62,10 +60,6 @@ Compare and save the intermediate table completely, compare the existing data of
Append external tables, only append without updating.
-This table song
-External table tag
-Intermediate table Songtag
---
Test 1: append and save OneToMany