حفظ صحت و یکپارچگی داده ها در پایگاه داده

در برخی از نرم افزارها که از سایز به نسبت بزرگی برخوردار هستند، به دلایلی گاهی بیشتر از یک پایگاه داده استفاده می شود. هنگامی که می خواهیم تغییری در داده های سیستم اعمال کنیم، نیاز هست تا هم زمان بر روی دو یا چند پایگاه داده، داده های جدید را ثبت کنیم. اما چطور مطمئن شویم که این عملیات بر روی همه پایگاه های داده ها با موفقیت ثبت شده و یا اگر مشکلی هست، مطمئن شویم در هیچ کدام هیچ تغییری صورت نپذیرفته است (Atomicty) و به عبارتی دقیق تر با شرابطی مواجه نشویم که یکپارچگی داده ها در سیستم از بین رفته باشد و داده ای در جایی ثبت شده باشد و در جایی دیگر موجود نباشد.

جواب این سوال استفاده از Transaction می باشد. یک Transaction به ما این امکان را می دهد تا کارهای ما به صورت اتمیک انجام بگیرند. یعنی یا همه با هم صورت بپذیرند و یا مطمئن باشیم هیچ کدام صورت نگرفته اند. در SQL Server می توانیم یک Transaction را بین چند پایگاه داده به اشتراک بگذاریم تا عملیات ما بر روی آن ها به صورت اتمیک صورت بگیرد.

یا در سناریو های ساده تر نیاز هست تا در Entity Framework چند بار متد SaveChanges را پشت سر هم صدا بزنیم. اگر در یکی از این دفعات متد SaveChanges با خطا رو به رو شد، با شرایطی مواجه می شویم که یکپارچگی داده ها از بین می رود چرا که یک سری از داده ها ذخیره شده اند و یک سری از داده ها از دست رفته اند. راه حل این مشکل هم استفاده از Transaction ها می باشد.

استفاده از Transaction ها در EF 6.x:
https://msdn.microsoft.com/en-us/data/dn456843.aspx