2012-05-09 30 views

cevap

4

Web.config dosyasındaki bağlantı dizesini değiştirin. önemli değil çünkü

<connectionStrings> 
    <add name="SandBoxEntities" connectionString="metadata=r... /> 
    </connectionStrings> 

Ben gerçek bağlantı dizesi kısaltılmış - sadece size web.config dosyasında bakmak için bir fikir vermek istedik.

Ayrıca bağlantı dizelerinizi programatik olarak da değiştirebilirsiniz. Example 16.2. Programmatically modifying an EntityConnectionString'a bakın.

+0

ben web.config'de bağlantı dizesini ayarlamak için biliyorum, ne bilmek istiyorum zamanında değiştirmek nasıl, Bu, hangi veritabanını kullanacağımı seçebilirim. Edmx dosyası oluşturduğumda bağlantı dizesi zaten ayarlanmış, çalışma zamanında değiştirmenin bir yolu var mı? – James

+0

Tamam - Cevabımı düzenledim ve size bunu nasıl yapacağınızı gösteren bir bağlantı verdim. –

+0

Bu soru ve cevaplar, her şeyi uygun bir özetle yazdı: http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string. –

22

Bağlantı dizelerini web.configs adresinde saklamıyoruz, bu nedenle kabul edilen çözüm bizim için çalışmaz. sadece baz DBContext yapıcısı aracılığıyla bağlantı dizgesi çalışırsanız, aşağıdaki özel durum alırsınız:

Kanununda kullanılırsa

Kod düzgün çalışmayabilir Veritabanı Birinci ve Model İlk gelişimi için T4 şablonları kullanarak oluşturulan

İlk mod Önce Veri veya Model Önce kullanmaya devam etmek için, Entity Framework bağlantı dizesinin yürütme uygulamasının yapılandırma dosyasında belirtildiğinden emin olun. Bu ilkeleri kullanmak için, önce Veritabanı Önce ya da Önce Modeli'nden, Kod İlkesi ile öznitelikleri ya da DbModelBuilder API'sini kullanarak herhangi bir ek yapılandırma ekleyin ve sonra bu özel durumu atanan kodu kaldırın. Bu sorunu çözmek için

, aşağıdaki gibi bağlamda kısmi bir sınıf oluşturmak ve ek EF meta ile bağlantı dizesini biçimlendirmek (MyContext sizin bağlam model adı nerede (örneğin model adınız MyModel.edmx daha vardır aşağıda her üç uzantıları ile MyModel değiştirilir kodunda MyContext, .ssdl, .msl)) kullanılan .csdl:

public partial class MyContext 
{ 
    public MyContext(string connStr) 
     : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr)) 
    { 
    } 
} 
+1

Bunun benim için çalışmasını sağlamak için, "'u bu yanıtta açıklandığı gibi tek bir alıntı olarak değiştirmeniz gerekiyordu: http://stackoverflow.com/a/7004173/994464 – Brenton

+0

Basit ve basit. –

1

Sen web.config'de birden bağlantı dizesini tanımlamak ve sonra belki kodunuzda kullanabilirsiniz senin işin. örneğin : `

<connectionStrings> 
    <add name="conStr1" connectionString="metadata=r... /> 
</connectionStrings>` 

<connectionStrings> 
    <add name="conStr2" connectionString="metadata=r... /> 
</connectionStrings>` 

ve

böylece

ve bağlam sınıf yapıcısı üzerindeki parametre olarak bağlantı dizesi adını almak:

public MyContext(string connStr) 
    : base(connStr) { } 

Ok. şimdi aşağıdaki gibi kodunuzda kullanabilirsiniz:

using (var db = new MyContext("name=conStr1")) 
{ 
    //your code here 
} 

ve sonra

using (var db = new MyContext("name=conStr2")) 
{ 
    //your code here 
} 
İlgili konular