PDA

View Full Version : چگونگی تغییر دادن Connection String ی که به وسیله Model در EF ساخته می شود



mohsen_zelzela00
چهارشنبه 16 فروردین 1391, 15:53 عصر
با سلام خدمت اساتید محترم
من زمانی که یک مدل با استفاده از EF ایجاد می کنم هم مسیر Model و هم Connection String به صورت زیر ایجاد می کند(در PC خودم)
<connectionStrings>
<add name="CLEARANCEEntities" connectionString="metadata=res://*/App_Code.Model.ClearanceModel.csdl|res://*/App_Code.Model.ClearanceModel.ssdl|res://*/App_Code.Model.ClearanceModel.msl;provider=System. Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=CL;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings>


زمانی که می خواهم برنامه را بر روی سرور یا کامپیوتر مشتری نصب کنم و بیام ConnectionString را به صورت دستی تغییر بدم اصلاً تغییر را در نظر نمی گیرد و من مجبورم که مدل را برای اون سرور از نو درست کنم آیا راحلی برای حل این مشکل وجود دارد؟؟؟؟

ممنون میشم اساتید محترم راهنمایی کنند

amir3321
چهارشنبه 16 فروردین 1391, 23:31 عصر
شما فقط نیاز به این داری که مقدار datasource و initialcatalog رو تغییر بدی من یک چنین مدلی استفاده می کنم


try
{


if (File.Exists(@"save.txt"))
{
FileStream confile1 = new FileStream(@"save.txt", FileMode.Open);
StreamReader sr = new StreamReader(confile1);
string infoname = sr.ReadLine();
string infoname2 = sr.ReadLine(); //";Integrated Security=True ;";//
sr.Close();
string[] sp1 = infoname.Split(new char[] { ',' });

password= 123;";

string[] sp2 = infoname2.Split(new char[] { ',' });
password= 123;";



Configuration currentconfiguration = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);

ConnectionStringsSection currentConnectionStringsSection = currentconfiguration.ConnectionStrings;

string maincon = ConfigurationManager.ConnectionStrings["GNREntities"].ConnectionString;
string[] conn2 = maincon.Split(new char[] { ';' });
string[] conn1 = maincon.Split(new char[] { ';' });
conn1[2] = "provider connection string=\"data source="+sp1[0].ToString();
conn1[3] = "initial catalog="+sp1[1].ToString();
conn1[4] = "user id= ss" ;
conn1[5] = "password=123";

maincon = "";

foreach (string so in conn1)
{
maincon += so+";";
}
}



currentconfiguration.ConnectionStrings.ConnectionS trings["GNREntities"].ConnectionString = maincon;
currentconfiguration.Save(ConfigurationSaveMode.Mi nimal);
ConfigurationManager.RefreshSection("connectionStrings");




}
}

mohsen_zelzela00
یک شنبه 20 فروردین 1391, 00:56 صبح
شما فقط نیاز به این داری که مقدار datasource و initialcatalog رو تغییر بدی من یک چنین مدلی استفاده می کنم


try
{


if (File.Exists(@"save.txt"))
{
FileStream confile1 = new FileStream(@"save.txt", FileMode.Open);
StreamReader sr = new StreamReader(confile1);
string infoname = sr.ReadLine();
string infoname2 = sr.ReadLine(); //";Integrated Security=True ;";//
sr.Close();
string[] sp1 = infoname.Split(new char[] { ',' });

password= 123;";

string[] sp2 = infoname2.Split(new char[] { ',' });
password= 123;";



Configuration currentconfiguration = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);

ConnectionStringsSection currentConnectionStringsSection = currentconfiguration.ConnectionStrings;

string maincon = ConfigurationManager.ConnectionStrings["GNREntities"].ConnectionString;
string[] conn2 = maincon.Split(new char[] { ';' });
string[] conn1 = maincon.Split(new char[] { ';' });
conn1[2] = "provider connection string=\"data source="+sp1[0].ToString();
conn1[3] = "initial catalog="+sp1[1].ToString();
conn1[4] = "user id= ss" ;
conn1[5] = "password=123";

maincon = "";

foreach (string so in conn1)
{
maincon += so+";";
}
}



currentconfiguration.ConnectionStrings.ConnectionS trings["GNREntities"].ConnectionString = maincon;
currentconfiguration.Save(ConfigurationSaveMode.Mi nimal);
ConfigurationManager.RefreshSection("connectionStrings");




}
}



دوست عزیز ممکنه کدی که نوشتید یه توضیح کوچلوی در موردش بدی

amir3321
شنبه 26 فروردین 1391, 11:13 صبح
کار خاصی نیست فقط یک فایل تکست هست که می تونید نام دیتابیس و نام سرور رو بوسیله یک فرم دیگه یا دستی داخل این فایل بریزید و در ادامه اون فایل رو بخونید و داخل یک ارایه بریزید بعد بوسیله دستورات Configuration بیایید و currentConnectionStrings رو لود کنید و در ادامه با ConfigurationManager و دانستن نام اون کانکشن داخل فایل appconfig مقدار اون رو بصورت رشته بدست بیارید حالا می تونید اون براساس جدا کننده(;) تبدیل به یک آرایه دیگر بکنید و بروش بالا که مشخص است اونو با مقدار مورد نظر تغییر بدهید بعد با اون دستور foreach به رشته تبدیل کنید و جایگزین مقدار اون در فایل appconfig نمایید و در آخر هم فایل را save نمایید

hosseinrasouli
چهارشنبه 30 فروردین 1391, 10:38 صبح
شما فقط نیاز به این داری که مقدار datasource و initialcatalog رو تغییر بدی من یک چنین مدلی استفاده می کنم


try
{


if (File.Exists(@"save.txt"))
{
FileStream confile1 = new FileStream(@"save.txt", FileMode.Open);
StreamReader sr = new StreamReader(confile1);
string infoname = sr.ReadLine();
string infoname2 = sr.ReadLine(); //";Integrated Security=True ;";//
sr.Close();
string[] sp1 = infoname.Split(new char[] { ',' });

password= 123;";

string[] sp2 = infoname2.Split(new char[] { ',' });
password= 123;";



Configuration currentconfiguration = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);

ConnectionStringsSection currentConnectionStringsSection = currentconfiguration.ConnectionStrings;

string maincon = ConfigurationManager.ConnectionStrings["GNREntities"].ConnectionString;
string[] conn2 = maincon.Split(new char[] { ';' });
string[] conn1 = maincon.Split(new char[] { ';' });
conn1[2] = "provider connection string=\"data source="+sp1[0].ToString();
conn1[3] = "initial catalog="+sp1[1].ToString();
conn1[4] = "user id= ss" ;
conn1[5] = "password=123";

maincon = "";

foreach (string so in conn1)
{
maincon += so+";";
}
}



currentconfiguration.ConnectionStrings.ConnectionS trings["GNREntities"].ConnectionString = maincon;
currentconfiguration.Save(ConfigurationSaveMode.Mi nimal);
ConfigurationManager.RefreshSection("connectionStrings");




}
}


سلام مهندس . کدها اجرا میشه ولی تغییرات در فایل app.config ذخیره نمیشه . لطفا کمک کنید ( ضروری )

amir3321
پنج شنبه 31 فروردین 1391, 17:17 عصر
من در این جا از فایل تکست برای کارهای دیگه استفاده کردم و قبلا این موضوع رو نمی دونستم که در حالت debug عمل save در appconfig انجام نمی شود ولی در حالتی که پروژه نهایی را از روی خود exe اجرا نمایید عمل save به درستی انجام می گردد خیال شما راحت باشد

amir3321
سه شنبه 12 اردیبهشت 1391, 08:34 صبح
ببین من روشی که استفاده کردم این بوده که اولا تمام ConnectionString های پروژه رو در appconfig نهایی قرار دادم البته من چون پروژه ای که کار کردم دارای چند زیر سیستم بود و برای هر زیر سیستم اومدم یک مدل ef درست کردم پس دارای چندین کانکشن بودم برای اینکه دردسر تولید اسم فایلهای اصلی مدلهای ef رو نداشته باشم اومدم کانکشن هر زیر سیستم رو در فایل کانفیگ نهای کپی کردم و بعد طبق همون روشی که در تاپیک هست فقط گزینه های که تغییر می کرد مثل سرور و نام دیتابیس رو تغییر دادم (چون نام فایل های مدلهای ef که ثابت هستند) و اونها رو در فایل تکست ذخیره می کردم
در فایل تکست هم من در یک فرم جدا گانه این دو گزینه رو بوسیله جستجوی شبکه و ثبت کاربر ذخیره می کردم.
و موقع اجرا فایل رو می خوندم و در کانکشن استفاده می کردم.

امید وارم مفید بوده باشد

hojati
چهارشنبه 17 خرداد 1391, 16:47 عصر
سلام دوستان من خودم از روش زیر استفاده میکنم و کاملا جوابم میده حتی من <connectionStrings> در فایل App.config از کار میندازم من با استفاده از توابع سازنده همون لحظه کانکشن جدید رو به entity میدم کارم میکنه ولی خودمم نمیدونم آیا این روش من درسته آیا روش دوستمون

AdventureWorksEntities context = new AdventureWorksEntitie(connection string)

که میتونید جای متغییر connection string رشته مورد نظر خود را وارد کنید.به نظرتون کدوم روش بهتره؟

amir3321
پنج شنبه 18 خرداد 1391, 16:06 عصر
خوب این خوبه ولی دلیل اصلی اینه که شما نیاز دارید در هر سیستم یکبار کانکشن استرینگ رو ذخیره کنید و در دفعه های بعد فقط ان رو فراخوانی کنید که این کار در appconfig یا هر روش دیگری انجام می گیرد این کد شما فقط جهت فراخوانی connection string می باشد

hojati
پنج شنبه 18 خرداد 1391, 18:33 عصر
من امروز متوجه شدم روشی که من استفاده میکنم یک مشکل داره اونم زمانی هست که میخواهید با یک user تعریف شده در sql server ( نه user sa) ) به بانک وصل شید در این حالت نمیشود از توابع سازنده و مقداردهی دستی کانکشن استفاده کرد و باید حتما این کارو در appconfig انجام داد تو سایتای خارجی هم گشتم خیلی ها همین مشکل رو داشتن .
پس نتیجه میگیریم روش شما کاملا بهتر و جامع تره و در همه حالات قابل استفاده هست.