مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

عملیات بر روی دو دیتابیس هم زمان در GenericRepository

چهارشنبه, 24 بهمن 1397 13:10

عملیات بر روی دو دیتابیس هم زمان در GenericRepository

سلام 
دو دیتابیس دارم که هر دو شبیه به هم هستند 
میخواهم در 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();
        }

چهارشنبه, 24 بهمن 1397 15:58

سلام.

عملی شدن یا عملی نشدن این کارتون رو تجربه نکردم تا نظر بدم ولی بخاطر یک سری هماهنگی داده هاتون خواستم کامنتی بنویسم.

فرض کنید ردیف جدید در یکی از دیتابیس ها ثبت شد ولی در دیتابیس بعدی با خطا مواجه شد؟؟تکلیف داده جدید چیه؟ این احتمال در آپدیت و حذف نیز قابل پیش بینی هست.

حالا برای حل اینکار Transaction هست ولی با یک DbContext.

توی Sp ها Transaction میشه نوشت که با 2 تا دیتابیس مجزا از هم, کار کنه ولی نمیدونم توی Ef هست یا نه.

چهارشنبه, 24 بهمن 1397 16:14

با سلام خدمت شما

برای این کار شما بهتره از 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();
        }
    }

پنج شنبه, 25 بهمن 1397 10:37

سلام

شما هم می تونی از Microsfot Sync Framework  استفاده کنی که راهکار خوبی است اما من نمی پسندم چون بشدت بار را سمت سرور و بالطبع در سمت کلاینت بالا می برد.

این کار را محول خود Sql server  کن! مثلا:

1- اگر کار حرفه ای میخواهی در HA  تنظیمات کن که هر رکوردی اضافه شد در دیتابیس دوم هم اضافه کند که کاری است بسیار متداول و مرسوم در پروژه های بزرگ

2- کار ساده تر اینکه یک Trigger  بسازی

یکشنبه, 28 بهمن 1397 09:16

ببنید مثلا من میخواهم راس ساعتی خاصی مثلا 12 شب اطلاعات از دیتابیس اول در دیتابیس دوم بروزسانی بشه 
ولی اینکه در Asp.net Core نمیدونم به شکل باید انجام بدم 
قبلا با HostedService کار کردم که بهش میگی مثلا هر 1ساعت یک بار اینکارو رو انجام بده 
ولی من اینجا میخواهم راس ساعتی هر دو دیتابیس را sync کنه 
ممنون میشم کمک کنید 

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید