avatar
Hassan Rasouli

کاربر

  • 1400/01/07
  • 0
  • 651
1400/01/07 |
backend
asp-net-core
dependency-injection

تغییر دیتابیس در زمان اجرای برنامه

یه مشکلی که من دارم برای Identity این است که دیتابیس من در زمان اجرای برنامه هنوز ایجاد نشده و من بعد از وارد کردن اطلاعات،   connectionstring  را به context  میدم و با دستور database.migration دیتابیس جدید را میسازم و دیتابیس  ایجاد میشه. الان که میخام کاربر جدید را با کلاس  Usermanager.CreateAsync بسازم خطا میده و هنوز به دیتابیس قبلی که در middleware  بهش دادم متصل است.

چطوری میتونم idrntity  را به دیتابیس جدید ارتباط بدم. من فکر کردم با تزریق وابستگی میشه و دوره تزریق وابستگی را هم خریداری کردم ولی مشکل حل نشد.

ممنون میشم راهنمایی کنید.


سلام در لینک زیر  نحوه تغییر دیتابیس در زمان اجرا آموزش داده شده است.

تغییر دیتابیس در زمان اجرا

 

یک کلاس فکتوری برای ایجاد دیتابیس کانکس ایجاد می کنید

public static class DbContextFactory
{
    public static Dictionary<string, string> ConnectionStrings { get; set; }

    public static void SetConnectionString(Dictionary<string, string> connStrs)
    {
        ConnectionStrings = connStrs;
    }

    public static MyDbContext Create(string connid)
    {
        if (!string.IsNullOrEmpty(connid))
        {
            var connStr = ConnectionStrings[connid];
            var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
            optionsBuilder.UseSqlServer(connStr);
            return new MyDbContext(optionsBuilder.Options);
        }
        else
        {
            throw new ArgumentNullException("ConnectionId");
        }
    }
}

و سپس کانکشن استرینگ ها را معرفی می کنید البته اینجا ایستا معرفی شده که شما می تواندی این ها را از هر منبعی داینامیک دریافت کنید

public void Configure()
{
  Dictionary<string, string> connStrs = new Dictionary<string, string>();
  connStrs.Add("DB1", Configuration["Data:DB1Connection:ConnectionString"]);
  connStrs.Add("DB2", Configuration["Data:DB2Connection:ConnectionString"]);
  DbContextFactory.SetConnectionString(connStrs);
}

و سپس هرجایی که نیاز داشتین به این صورت ازش استفاده می کنید

var dbContext= DbContextFactory.Create("DB1");

 


  • 1400/01/08

ممنون از پاسختون.

من خودم یه راه پیدا کردم به این صورت که از خود dbcontext میشه connectionstring را عوض کرد. به این صورت که هر زمانی که نیاز است به دیتابیس جدید متصل شد با دستور زیر آن را اعمال می کنیم:

 _context.Database.SetConnectionString(newConnString);

 



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری