10 Mayıs 2016

Entity Framework connection stringi class içerisine gömmek.

Entity kullanırken her kullanıcının kendi databasesini kullanması için dinamik bir connection string oluşturmamız gerekebilir. Bunu yapmak için aşağıdaki adımları yapalım.
Entity Framework bağladığınızı varsayıyorum.
Adımları buradan devam ettireceğim.

Önce connectionStringimize tüm formların ulaşabileceği bir class tanımlayalım. Ve içerisine public static bir string oluşturalım. Ben clasımın adını "BaglantiBilgileri" koydum.

Class tamamlandığı zaman aşağıdaki gibi olacaktır.

namespace ConsoleApplication1

{


    class BaglantiBilgileri

    {

        public static string demoConnectionString { get; set; }

    }

}


Benim Entity Model imin adı DemoModel.edmx. Solution Explorer altında
DemoModel.Context.cs içerisindeki

 public DemoEntities()

            : base("name=DemoEntities")

metodunu

  public DemoEntities()

            : base(BaglantiBilgileri.demoConnectionString)

olacak şekilde değiştirelim.

Projemizin App.config dosyası içerisinde entity frameworkun oluşturduğu connection string aşağıdaki gibidir.

 <connectionstrings>     <add connectionstring="metadata=res://*/DemoModel.csdl|res://*/DemoModel.ssdl|res://*/DemoModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=Demo;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" name="DemoEntities" providername="System.Data.EntityClient">   </add></connectionstrings>




Dikkat ederseniz daha önce sildiğimiz base("name=DemoEntities") kısmındaki name ile connection string name ifadesi aynıdır. Daha önce sistem web config içerisinde  DemoEntities adındaki connection stringi alıyordu. Biz bunun yerine direk class içerisindeki connection stringi alacağız.
Yukarıdaki connectionstring bizim için önemli olan kısım. altı çizili olan ifadeyi kullanacağız. Ama kullanmadan önce &quot yazan yeri tek tırnak (') ile değiştirelim.

Şimdi kullanacağımız connection string ifademiz ben console uygulaması yaptığım için program.cs içersinde aşağıdaki gibi tanımladım.

BaglantiBilgileri.demoConnectionString = @"metadata=res://*/DemoModel.csdl|res://*/DemoModel.ssdl|res://*/DemoModel.msl;provider=System.Data.SqlClient;provider connection string=';data source=.\SQLEXPRESS;initial catalog=Demo;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework';";

Yukarıdaki işlemleri yaptıktan sonra artık Entity içerisinde yaptığımız işlemler yeni connection stringe göre olacaktır. Bu yüzden istertsek App.config içierisindeki connection string bilgisini silebiliriz. Connection string içerisini kullanacağımız connection stringe göre değiştirebiliriz.