- 1400/01/07
- 0
- 651
تغییر دیتابیس در زمان اجرای برنامه
یه مشکلی که من دارم برای Identity این است که دیتابیس من در زمان اجرای برنامه هنوز ایجاد نشده و من بعد از وارد کردن اطلاعات، connectionstring را به context میدم و با دستور database.migration دیتابیس جدید را میسازم و دیتابیس ایجاد میشه. الان که میخام کاربر جدید را با کلاس Usermanager.CreateAsync بسازم خطا میده و هنوز به دیتابیس قبلی که در middleware بهش دادم متصل است.
چطوری میتونم idrntity را به دیتابیس جدید ارتباط بدم. من فکر کردم با تزریق وابستگی میشه و دوره تزریق وابستگی را هم خریداری کردم ولی مشکل حل نشد.
ممنون میشم راهنمایی کنید.
- 1400/01/08
سلام در لینک زیر نحوه تغییر دیتابیس در زمان اجرا آموزش داده شده است.
یک کلاس فکتوری برای ایجاد دیتابیس کانکس ایجاد می کنید
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);
پاسخی برای این باگ ارسال کنید
لطفا کدها را درون قطعه کد ارسال نمایید
برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری