ایجاد دو دیتابیس بصورت همزمان در داخل پروژه به روش codefirst
سلام بنده می خواهم به روش codefirst بصورت همزمان دو دیتابیس ایجاد کنم
ممنون میشم راهنمایی فرمایید.
در داخل Startup این کد ها رو نوشتم
services.AddDbContext<SiteContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("SiteConnection"));
});
services.AddDbContext<Site2Context>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("Site2Connection"));
});
در داخل appsettings این کد ها رو
{
"ConnectionStrings": {
"SiteConnection": "Data Source=.;Initial Catalog=Sitem_DB;Integrated Security=True;MultipleActiveResultSets=True;",
"Site2Connection": "Data Source=.;Initial Catalog=Site2m_DB;Integrated Security=True;MultipleActiveResultSets=True;"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
خطایی که بعد از میده add-Migration
More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.
پاسخ هوش مصنوعی
برای ایجاد دو دیتابیس به روش Code First در یک پروژه، شما باید هنگام اجرای دستورات مایگریشن در PowerShell یا خط فرمان، مشخص کنید که کدام DbContext را می خواهید استفاده کنید.
به عنوان مثال، اگر شما دستوری مانند add-Migration
دارید، باید از پارامتر -Context
برای مشخص کردن DbContext استفاده کنید. به شکل زیر:
add-Migration InitialCreate -Context SiteContext
برای Migration دوم:
add-Migration InitialCreate -Context Site2Context
باید به این نکته توجه داشته باشید که برای هر DbContext باید یک Migration جداگانه ایجاد کنید. این کار باعث می شود که تغییرات در هر دیتابیس به صورت مجزا مدیریت شود.
همچنین مطمین شوید که DbSets مربوط به هر Context در کلاس های خود به درستی تعریف شده اند تا بتوانید هنگام اجرای Migrationها با هیچ خطایی روبرو نشوید.
سلام
اگر شما بخواید 2 دیتابیس داشته باشید باید عملا 2 کانکشن استرینگ هم داشته باشید. چون نمیشه با یک کانکشن استرینگ همزمان به دو دیتابیس وصل شد.
شما Connection String خودتون رو توی فایل appsetting.json تعریف کردید. این کار صحیح نیست چون اطلاعات موجود در این فایل استاتیک یا ثابت هست و شما نمیتونید بین کانکشن استرینگ های مختلف swtich کنید.
البته کلا پیشنهاد میشه از یک دیتابیس استفاده کنید چون استفاده از بیش از یک دیتابیس در یک پروژه مشکلات زیادی رو براتون به همراه خواهد داشت. در هر صورت برای تغییر کانکشن استرینگ باید Connection String رو در کلاس DbContext بنویسید تا بتونید کانکشن رو تغییر بدید.
از کدهای زیر برای انجام این کار می تونید استفاده کنید
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//&& !optionsBuilder.IsConfigured
if (DbManager.DbName != null )
{
var dbName = DbManager.DbName;
optionsBuilder.UseSqlServer("Data Source =.; Database = " + dbName + "; User Id = sa; Password = 1;");
}
}
public static class DbManager
{
public static string DbName;
public static string GetDbConnectionString(string dbName)
{
return DbConnectionManager.GetConnectionString(dbName);
}
}
public static class DbConnectionManager
{
public static List<DbConnection> GetAllConnections()
{
List<DbConnection> result;
using (StreamReader r = new StreamReader("appsetting.json"))
{
string json = r.ReadToEnd();
result = DbConnection.FromJson(json);
}
return result;
}
public static string GetConnectionString(string dbName)
{
return GetAllConnections().FirstOrDefault(c => c.Name == dbName)?.Dbconnection;
}
}
public class DbConnection
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("dbconnection")]
public string Dbconnection { get; set; }
public static List<DbConnection> FromJson(string json) => JsonConvert.DeserializeObject<List<DbConnection>>(json, Converter.Settings);
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
}
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2