Uygulamamızın hem ADO.NET hem de Entity Framework'ü kullandığı karma bir ortamdayız.
Her ikisi de aynı fiziksel SQL sunucusuna işaret ettiğinden, Entity Framework bağlantı dizesini yapılandırma dosyasından kaldırmak ve dizeyi geçerli ADO.NET bağlantı dizelerini temel alarak otomatik olarak oluşturmak istiyoruz.
Bu, geliştiricinin ADO.NET dizesini değiştirdiği, ancak Entity Framework bağlantı dizesini değiştirmeyi unutduğu hatalardan kurtarır.Entity Framework 6 set bağlantı dizesi çalışma zamanı
Bunu okudum ama soruya cevap vermediler.
How do I create connection string programmatically to MS SQL in Entity Framework 6?
Kendi DbConnection oluşturmak ve DBContext (ExistingConnection, contextOwnsConnection) o zaman bir hata atar o geçerseniz "bağlam için bir EDMX dosyasından oluşturulan kodla Kod İlk modunda kullanılıyor ya Veritabanı İlk veya Model İlk geliştirme. "
Kod İlk kullanmıyorum.
https://msdn.microsoft.com/en-us/data/jj680699
Bu, EF 6'daki kod tabanı yapılandırması hakkında konuştu, ancak makale bağlantı dizesini gerçekten değiştiren herhangi bir kod göstermiyor.
GÜNCELLEME: Sorumu açıklığa kavuşturmaya yardımcı olacak daha fazla bilgi.
Öncelikle kod kullanmıyorum ve yapılandırma dosyasının dışında bir bağlantı dizesi oluşturmak istiyorum.
Kullanmakta olduğum DbContext, T4 şablonunun oluşturduğu otomatik oluşturulan DbContext dosyasına kısmi bir sınıftır.
Kalıtsal bir DbConfiguration sınıfı oluşturmam gerektiği ve bu sınıfta bir şeyler yapmam gerektiği izlenimindeydim ancak bulduğum tek örnek Azure kullanıyor.
Kod Çalışması'nda, çalışma zamanında bağlantı dizesinin ayarlanmasından söz eden ancak makalenin her yeni bir Varlık kapsayıcısını oluşturduğumda bir bağlantı dizesi oluşturmaya dayalı bir makalesi var.
http://www.codeproject.com/Tips/234677/Set-the-connection-string-for-Entity-Framework-at
arayan özel bir şey yapmak zorunda kalmaması ben bağlantı dizesini oluşturmak için benim kısmi DBContext sınıfını kullanabilmek için istiyorum.
GÜNCELLEME: RunTime kodunu Çalışma ancak, benim varlık sınıfına aramaları değiştirmeden bağlantı dizesini değiştirmek başardı "aşağıda listelenmiştir" @Circular Referans tarafından gönderildi kodu kullanarak
DesignTime AMA bu işe yaramazsa DesignTime EDMX dosyası için.
public partial class TestEntities : DbContext
{
public TestEntities() : base(GetSqlConnection(), true)
{
}
public static DbConnection GetSqlConnection()
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
var connectionSettings = ConfigurationManager.ConnectionStrings("Current_ADO_Connection_In_Config");
// Set the provider name.
entityBuilder.Provider = connectionSettings.ProviderName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = connectionSettings.ConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = "res://*/Models.TestModel.csdl|res://*/Models.TestModel.ssdl|res://*/Models.TestModel.msl";
return new EntityConnection(entityBuilder.ToString());
}
}
Şimdi DesignTime'ı çalıştırabilirsem, bu iyi olur.
sana ObjectContext inste kullanarak olacağını düşünüyorum İlk önce kod kullanmadığınız için DbContext'in reklamı. Bu ilişkide% 100 emin değilim. Bu, şu ipuçlarına: https://msdn.microsoft.com/en-us/library/bb738461(v=vs.110).aspx ve buradan bağlantı oluşturmayı açıklayan bir bağlantıdır: https://msdn.microsoft.com /en-us/library/bb738533%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AaronLS
CodeFirst için bağlantı dizeleri genellikle standart bağlantı dizeleridir; burada CodeFirst olmayanlar için bağlantı dizeleri genellikle csdl'ye başvururlar. ssdl/msl dosyaları. – AaronLS