دسته بندی ها
15:07 1398/12/14

ایجاد دو دیتابیس بصورت همزمان در داخل پروژه به روش codefirst

مشخصات سوال کننده :
کاربر : hossein1244     امتیاز کاربر : 9     رتبه کاربر : 72
دسته بندی : Asp.net Mvc Asp.net Core

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 2831
هوش مصنوعی

پاسخ هوش مصنوعی

برای ایجاد دو دیتابیس به روش Code First در یک پروژه، شما باید هنگام اجرای دستورات مایگریشن در PowerShell یا خط فرمان، مشخص کنید که کدام DbContext را می خواهید استفاده کنید.

به عنوان مثال، اگر شما دستوری مانند add-Migration دارید، باید از پارامتر -Context برای مشخص کردن DbContext استفاده کنید. به شکل زیر:

add-Migration InitialCreate -Context SiteContext

برای Migration دوم:

add-Migration InitialCreate -Context Site2Context

باید به این نکته توجه داشته باشید که برای هر DbContext باید یک Migration جداگانه ایجاد کنید. این کار باعث می شود که تغییرات در هر دیتابیس به صورت مجزا مدیریت شود.

همچنین مطمین شوید که DbSets مربوط به هر Context در کلاس های خود به درستی تعریف شده اند تا بتوانید هنگام اجرای Migrationها با هیچ خطایی روبرو نشوید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : pedram_khan 22:04 1398/12/29

سلام

اگر شما بخواید 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 }
            },
                };
            }
        }

 

به این پاسخ امتیاز بدهید    2
امتیاز: 277 رتبه: 6
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود