سلام
دو دیتابیس دارم که هر دو شبیه به هم هستند
میخواهم در GenericRepository ,وقتی داده ای را مثلا رکوردی را اضافه کرد در دیتابیس دوم هم ذخیره بشه ولی وقتی هر برای هر دو Add میزارم مثل کد پائین فقط بر روی دیتابیس اول اعمال میشه
امکانش نیست به این شکل هم زمان بر روی دوتابیس در یک GenericRepository داده ها را تغییر داد ؟
مثلا برای Add
public async Task AddAsync(T entity) { await _dbContext.Set<T>().AddAsync(entity); await SaveChangesAsync(); await _secondContext.Set<T>().AddAsync(entity); await SaveChangesDb2Async(); }
سلام.
عملی شدن یا عملی نشدن این کارتون رو تجربه نکردم تا نظر بدم ولی بخاطر یک سری هماهنگی داده هاتون خواستم کامنتی بنویسم.
فرض کنید ردیف جدید در یکی از دیتابیس ها ثبت شد ولی در دیتابیس بعدی با خطا مواجه شد؟؟تکلیف داده جدید چیه؟ این احتمال در آپدیت و حذف نیز قابل پیش بینی هست.
حالا برای حل اینکار Transaction هست ولی با یک DbContext.
توی Sp ها Transaction میشه نوشت که با 2 تا دیتابیس مجزا از هم, کار کنه ولی نمیدونم توی Ef هست یا نه.
با سلام خدمت شما
برای این کار شما بهتره از Microsoft Sync Framework استفاده کنیدزیرا ممکنه در هنگام علملیات هاتون باعث ایجاد اختلاف در DB ها شوید و بسیار وقت گیر خواهد بود برطرف کردن آن ها و یا ایجاد کنترل های مربوط به مدیریت آن.
https://barnamenevisan.org/Articles/Article5170.html
ولی در صورتی که حتما نیاز به استفاده از روش خودتون رو دارید باید تمام فیلد های Auto incriment رو در دیتابیس دوم از این حالت خارج کنید تا تمام دیتا های ذخیره شده در Table اول به درستی در Table دوم ذخیره شوند.
public class GenericRepository<TEntity> where TEntity : class { private Context1 _context1; private Context2 _context2; public GenericRepository(Context1 context1, Context2 context2) { _context1 = context1; _context2 = context2; } public virtual void Insert(TEntity entity) { _context1.Set<TEntity>().Add(entity); _context1.SaveChanges(); _context2.Set<TEntity>().Add(entity); _context2.SaveChanges(); } }
سلام
شما هم می تونی از Microsfot Sync Framework استفاده کنی که راهکار خوبی است اما من نمی پسندم چون بشدت بار را سمت سرور و بالطبع در سمت کلاینت بالا می برد.
این کار را محول خود Sql server کن! مثلا:
1- اگر کار حرفه ای میخواهی در HA تنظیمات کن که هر رکوردی اضافه شد در دیتابیس دوم هم اضافه کند که کاری است بسیار متداول و مرسوم در پروژه های بزرگ
2- کار ساده تر اینکه یک Trigger بسازی
ببنید مثلا من میخواهم راس ساعتی خاصی مثلا 12 شب اطلاعات از دیتابیس اول در دیتابیس دوم بروزسانی بشه
ولی اینکه در Asp.net Core نمیدونم به شکل باید انجام بدم
قبلا با HostedService کار کردم که بهش میگی مثلا هر 1ساعت یک بار اینکارو رو انجام بده
ولی من اینجا میخواهم راس ساعتی هر دو دیتابیس را sync کنه
ممنون میشم کمک کنید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)