ممنون از راهنماییتون، پروژه رو نگاه کردم، شبیه به سناریو فوق در بخش ویرایش یک پست وجود داره که در اونجا رابطه یک به چند بین Post و DownLoadLink هست.
اما روشی که برای ویرایش در اونجا استفاده شده به این صورت هست که ابتدا در در اکشن متد EditPost کنترلر PostController ناحیه ادمین، همه DownLoadLink های پستی که در حال ویرایش آن هستیم، پاک میشوند و سپس در متد EditPost مربوط به PostService، دانلودلینکهای EditPostModel به جای آنها مینشینند، در واقع در صورت ویرایش دانلودلینکهای یک پست، ویرایش واقعی انجام نمیشود، بلکه این کار با حذف(sql Delete) کلیه دانلودلینکهای آن پست از DB و درج مجدد دانلودلینکهای تغییر یافته و نیافته (sql Insert) ، شبیه سازی میشود. درست است که نتیجه کار با ویرایش واقعی(sql Update) تفاوت نمیکتد اما به نظر من ویرایش با این روش سه مشکل زیر را دارد:
- حتی اگر هنگام ویرایش یک پست هیچ تغییری در دانلودلینکها داده نشود باز هم حذف تمامی آنها و درج مجدد آنها صورت خواهد گرفت.
- پایین آمدن کارایی وقتی که تعداد رکوردهای طرف چندِ رابطۀ یک به چند زیاد باشد(در اینجا دانلودلینکها).
-
در برخی موارد مثل مورد زیر که طرف چند رابطه ( OrderLine ) دارای ارتباطاتی باشد، حذف فیزیکی و درج مجدد آن به هنگام ویرایش Order دردسرساز خواهد شد:
آیا راهی برای رفع این موارد وجود دارد؟ به عبارت دیگر آیا راهی وجود دارد که به جای حذف فیزیکی رکوردها و درج تغییرات(Delete,Insert)؛ فقط تغییرات را اعمال کنیم(Update)؟