Bağlan ion dizeleri ve modelleri

Bu konu, Entity Framework'ün hangi veritabanı bağlantısını kullanacağınızı nasıl keşfedeceğini ve nasıl değiştirebileceğinizi kapsar. Code First ve EF Tasarım Aracı ile oluşturulan modeller bu konuda ele alınmıştır.

Genellikle bir Entity Framework uygulaması DbContext'ten türetilen bir sınıf kullanır. Bu türetilmiş sınıf, denetlemek için temel DbContext sınıfındaki oluşturuculardan birini çağırır:

  • Bağlamın veritabanına nasıl bağlanacağı, yani bir bağlantı dizesi nasıl bulunduğu/kullanıldığı
  • Bağlamın Code First kullanarak modeli hesaplayıp hesaplamayacağını veya EF Tasarım Aracı ile oluşturulan bir modeli yükleyip yüklemeyeceği
  • Ek gelişmiş seçenekler

Aşağıdaki parçalar, DbContext oluşturucularının kullanılabilmesinin bazı yollarını gösterir.

Kurala göre bağlantıyla Code First kullanma

Uygulamanızda başka bir yapılandırma yapmadıysanız, DbContext'te parametresiz oluşturucunun çağrılması, DbContext'in kural tarafından oluşturulan bir veritabanı bağlantısıyla Code First modunda çalışmasına neden olur. Örnek:

namespace Demo.EF
{
    public class BloggingContext : DbContext
    {
        public BloggingContext()
        // C# will call base class parameterless constructor by default
        {
        }
    }
}

Bu örnekte DbContext, türetilmiş bağlam sınıfınızın ad alanı nitelenmiş adını (Demo.EF.BloggingContext) veritabanı adı olarak kullanır ve SQL Express veya LocalDB kullanarak bu veritabanı için bir bağlantı dizesi oluşturur. Her ikisi de yüklüyse SQL Express kullanılır.

Visual Studio 2010 varsayılan olarak SQL Express'i, Visual Studio 2012 ve sonraki sürümleri de LocalDB'i içerir. Yükleme sırasında EntityFramework NuGet paketi hangi veritabanı sunucusunun kullanılabilir olduğunu denetler. NuGet paketi, kurala göre bağlantı oluştururken Code First tarafından kullanılan varsayılan veritabanı sunucusunu ayarlayarak yapılandırma dosyasını güncelleştirir. SQL Express çalışıyorsa kullanılır. SQL Express kullanılamıyorsa LocalDB varsayılan olarak kaydedilir. Varsayılan bağlantı fabrikası için zaten bir ayar içeriyorsa yapılandırma dosyasında hiçbir değişiklik yapılmaz.

Kurala ve belirtilen veritabanı adına göre bağlantıyla Code First kullanma

Uygulamanızda başka bir yapılandırma yapmadıysanız, dbContext'te dize oluşturucusunu kullanmak istediğiniz veritabanı adıyla çağırmak, DbContext'in bu adın veritabanına kuralıyla oluşturulan bir veritabanı bağlantısıyla Code First modunda çalışmasına neden olur. Örnek:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingDatabase")
    {
    }
}

Bu örnekte DbContext, veritabanı adı olarak "BloggingDatabase" kullanır ve SQL Express (Visual Studio 2010 ile yüklenir) veya LocalDB (Visual Studio 2012 ile yüklenir) kullanarak bu veritabanı için bir bağlantı dizesi oluşturur. Her ikisi de yüklüyse SQL Express kullanılır.

app.config/web.config dosyasında bağlantı dizesi ile Code First kullanma

app.config veya web.config dosyanıza bir bağlantı dizesi yerleştirmeyi seçebilirsiniz. Örnek:

<configuration>
  <connectionStrings>
    <add name="BloggingCompactDatabase"
         providerName="System.Data.SqlServerCe.4.0"
         connectionString="Data Source=Blogging.sdf"/>
  </connectionStrings>
</configuration>

Bu, DbContext'e SQL Express veya LocalDB dışında bir veritabanı sunucusu kullanmasını söylemenin kolay bir yoludur; yukarıdaki örnek bir SQL Server Compact Edition veritabanını belirtir.

bağlantı dizesi adı bağlamınızın adıyla eşleşiyorsa (ad alanı niteliğine sahip veya olmayan), parametresiz oluşturucu kullanıldığında DbContext tarafından bulunur. bağlantı dizesi adı bağlamınızın adından farklıysa DbContext'e bağlantı dizesi adını DbContext oluşturucusundan geçirerek Code First modunda bu bağlantıyı kullanmasını söyleyebilirsiniz. Örnek:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingCompactDatabase")
    {
    }
}

Alternatif olarak, DbContext oluşturucusna geçirilen dize için "name=<bağlantı dizesi name>" formunu kullanabilirsiniz. Örnek:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("name=BloggingCompactDatabase")
    {
    }
}

Bu form, yapılandırma dosyanızda bağlantı dizesi bulunmasını beklediğinizi açıkça gösterir. Verilen ada sahip bir bağlantı dizesi bulunamazsa bir özel durum oluşturulur.

App.config/web.config dosyasında bağlantı dizesi ile Önce Veritabanı/Model

EF Tasarım Aracı ile oluşturulan modeller, modelinizin zaten mevcut olması ve uygulama çalıştırıldığında koddan oluşturulmamasından farklıdır. Model genellikle projenizde bir EDMX dosyası olarak bulunur.

Tasarımcı app.config veya web.config dosyanıza bir EF bağlantı dizesi ekler. Bu bağlantı dizesi, EDMX dosyanızdaki bilgileri bulma hakkında bilgi içermesi için özeldir. Örnek:

<configuration>  
  <connectionStrings>  
    <add name="Northwind_Entities"  
         connectionString="metadata=res://*/Northwind.csdl|  
                                    res://*/Northwind.ssdl|  
                                    res://*/Northwind.msl;  
                           provider=System.Data.SqlClient;  
                           provider connection string=  
                               &quot;Data Source=.\sqlexpress;  
                                     Initial Catalog=Northwind;  
                                     Integrated Security=True;  
                                     MultipleActiveResultSets=True&quot;"  
         providerName="System.Data.EntityClient"/>  
  </connectionStrings>  
</configuration>

EF Tasarım Aracı, dbContext oluşturucusunun bağlantı dizesi adını geçirerek DbContext'e bu bağlantıyı kullanmasını bildiren bir kod da oluşturur. Örnek:

public class NorthwindContext : DbContext
{
    public NorthwindContext()
        : base("name=Northwind_Entities")
    {
    }
}

Bağlantı dizesi kullanılacak modelin ayrıntılarını içeren bir EF bağlantı dizesi olduğundan DbContext mevcut modeli yüklemeyi bilir (koddan hesaplamak için Önce Kod kullanmak yerine).

Diğer DbContext oluşturucu seçenekleri

DbContext sınıfı, daha gelişmiş senaryolara olanak tanıyan diğer oluşturucuları ve kullanım desenlerini içerir. Bunlardan bazıları şunlardır:

  • DbModelBuilder sınıfını kullanarak bir DbContext örneği örneği oluşturmadan Code First modeli oluşturabilirsiniz. Bunun sonucu bir DbModel nesnesidir. Ardından, DbContext örneğinizi oluşturmaya hazır olduğunuzda bu DbModel nesnesini DbContext oluşturucularından birine geçirebilirsiniz.
  • Veritabanı veya bağlantı dizesi adı yerine DbContext'e tam bağlantı dizesi geçirebilirsiniz. Varsayılan olarak bu bağlantı dizesi System.Data.SqlClient sağlayıcısıyla birlikte kullanılır; bu, bağlama farklı bir I Bağlan ionFactory uygulaması ayarlanarak değiştirilebilir. Database.Default Bağlan ionFactory.
  • Var olan bir Db Bağlan ion nesnesini bir DbContext oluşturucusna geçirerek kullanabilirsiniz. Bağlantı nesnesi Entity Bağlan ion örneğiyse, Önce Kod kullanarak bir modeli hesaplamak yerine bağlantıda belirtilen model kullanılır. Nesne, sql Bağlan ion gibi başka bir türün örneğiyse bağlam bunu Code First modu için kullanır.
  • Var olan bir ObjectContext'i bir DbContext oluşturucusna geçirerek var olan bağlamı kaydıran bir DbContext oluşturabilirsiniz. Bu, ObjectContext kullanan ancak uygulamanın bazı bölümlerinde DbContext'in avantajlarından yararlanmak isteyen mevcut uygulamalar için kullanılabilir.