Entity Framework ile Elastik Veritabanı istemci kitaplığı

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu belge, Elastik Veritabanı araçlarıyla tümleştirmek için gereken Entity Framework uygulamasındaki değişiklikleri gösterir. Odak, Entity Framework Code First yaklaşımıyla parça eşleme yönetimi ve verilere bağımlı yönlendirme oluşturmaktır. EF için İlk Kod - Yeni Veritabanı öğreticisi, bu belgenin her yanında çalışan örnek olarak görev alır. Bu belgeye eşlik eden örnek kod, Visual Studio Code Örnekleri'ndeki elastik veritabanı araçlarının örnek kümesinin bir parçasıdır.

Dekont

Bu makale Entity Framework Core (EF Core) için geçerli değildir.

Örnek Kodu İndirme ve Çalıştırma

Bu makalenin kodunu indirmek için:

Örneği çalıştırmak için Azure SQL Veritabanı üç boş veritabanı oluşturmanız gerekir:

  • Parça Eşleme Yöneticisi veritabanı
  • Parça 1 veritabanı
  • Parça 2 veritabanı

Bu veritabanlarını oluşturduktan sonra Program.cs'deki yer tutucularını sunucu adınız, veritabanı adları ve veritabanlarına bağlanmak için kimlik bilgilerinizle doldurun. Çözümü Visual Studio'da oluşturun. Visual Studio, derleme işleminin bir parçası olarak elastik veritabanı istemci kitaplığı, Entity Framework ve Geçici Hata işleme için gerekli NuGet paketlerini indirir. Çözümünüz için NuGet paketlerini geri yüklemenin etkinleştirildiğinden emin olun. Visual Studio Çözüm Gezgini çözüm dosyasına sağ tıklayarak bu ayarı etkinleştirebilirsiniz.

Entity Framework iş akışları

Entity Framework geliştiricileri, uygulama oluşturmak ve uygulama nesnelerinin kalıcılığını sağlamak için aşağıdaki dört iş akışından birini kullanır:

  • Code First (Yeni Veritabanı): EF geliştiricisi modeli uygulama kodunda oluşturur ve ardından EF veritabanını ondan oluşturur.
  • Code First (Mevcut Veritabanı): Geliştirici, EF'nin mevcut bir veritabanından model için uygulama kodu oluşturmasına izin verir.
  • Model First: Geliştirici modeli EF tasarımcısında oluşturur ve ardından EF modelinden veritabanını oluşturur.
  • Önce Veritabanı: Geliştirici, modeli mevcut bir veritabanından çıkarsamak için EF araçlarını kullanır.

Tüm bu yaklaşımlar, bir uygulamanın veritabanı bağlantılarını ve veritabanı şemasını saydam bir şekilde yönetmek için DbContext sınıfını kullanır. DbContext temel sınıfındaki farklı oluşturucular, bağlantı oluşturma, veritabanı önyüklemesi ve şema oluşturma üzerinde farklı denetim düzeyleri sağlar. Zorluklar öncelikle EF tarafından sağlanan veritabanı bağlantı yönetiminin elastik veritabanı istemci kitaplığı tarafından sağlanan veriye bağımlı yönlendirme arabirimlerinin bağlantı yönetimi özellikleriyle kesişmesinden kaynaklanabilir.

Elastik veritabanı araçları varsayımları

Terim tanımları için bkz . Elastik Veritabanı araçları sözlüğü.

Elastik veritabanı istemci kitaplığı ile uygulama verilerinizin bölümlerini parçacıklar olarak tanımlarsınız. Parçacıklar bir parçalama anahtarıyla tanımlanır ve belirli veritabanlarına eşlenir. Bir uygulamanın gerektiği kadar veritabanı olabilir ve mevcut iş gereksinimlerine göre yeterli kapasite veya performans sağlamak için parçaları dağıtabilir. Parçalama anahtarı değerlerinin veritabanlarına eşlenmesi, elastik veritabanı istemci API'leri tarafından sağlanan bir parça eşlemesi tarafından depolanır. Bu özellik Parça Eşleme Yönetimi veya kısaca SMM olarak adlandırılır. Parça eşlemesi, parçalama anahtarı taşıyan istekler için veritabanı bağlantılarının aracısı olarak da görev alır. Bu özellik, verilere bağımlı yönlendirme olarak bilinir.

Parça eşleme yöneticisi, kullanıcıları eşzamanlı parçacık yönetimi işlemleri (verileri bir parçadan diğerine yeniden konumlandırma gibi) gerçekleştiğinde oluşabilecek tutarsız görünümlerden parçacık verilerine karşı korur. Bunu yapmak için parça, istemci kitaplığı aracısı tarafından yönetilen bir uygulamanın veritabanı bağlantılarını eşler. Bu, parça yönetimi işlemleri bağlantının oluşturulduğu parçalıyı etkileyebileceğinden parça eşleme işlevinin veritabanı bağlantısını otomatik olarak sonlandırmasına olanak tanır. Bu yaklaşımın, veritabanının var olup olmadığını denetlemek için mevcut olandan yeni bağlantılar oluşturma gibi EF'nin bazı işlevleriyle tümleştirilmesi gerekir. Genel olarak, standart DbContext oluşturucularının yalnızca EF çalışması için güvenli bir şekilde kopyalanabilen kapalı veritabanı bağlantıları için güvenilir bir şekilde çalıştığı gözlemlenmiştir. Bunun yerine elastik veritabanının tasarım ilkesi yalnızca açılan bağlantıları aracılık etmektir. Bağlantının EF DbContext'e teslim etmeden önce istemci kitaplığı tarafından aracılık edilen bir bağlantının kapatılmasının bu sorunu çözebileceğini düşünebilirsiniz. Ancak, bağlantıyı kapatıp yeniden açmak için EF'ye bağlı olarak, kitaplık tarafından gerçekleştirilen doğrulama ve tutarlılık denetimlerinden biri ön plandadır. Ancak EF'teki geçiş işlevi, temel alınan veritabanı şemasını uygulama için saydam bir şekilde yönetmek için bu bağlantıları kullanır. İdeal olarak, hem elastik veritabanı istemci kitaplığından hem de EF'den gelen tüm bu özellikleri aynı uygulamada saklayıp birleştireceksiniz. Aşağıdaki bölümde bu özellikler ve gereksinimler daha ayrıntılı olarak ele alınmaktadır.

Gereksinimler

Hem elastik veritabanı istemci kitaplığı hem de Entity Framework API'leriyle çalışırken aşağıdaki özellikleri korumak istiyorsunuz:

  • Ölçeği genişletme: Uygulamanın kapasite talepleri için gereken şekilde parçalanmış uygulamanın veri katmanına veritabanı eklemek veya kaldırmak için. Bu, veritabanlarını oluşturmak ve silmek ve veritabanlarını yönetmek için elastik veritabanı parça eşleme yöneticisi API'lerini ve parçacık eşlemelerini kullanma denetimi anlamına gelir.
  • Tutarlılık: Uygulama parçalama kullanır ve istemci kitaplığının verilere bağımlı yönlendirme özelliklerini kullanır. Bozulmayı veya yanlış sorgu sonuçlarını önlemek için, bağlantılara parça eşleme yöneticisi aracılığıyla aracılık yapılır. Bu aynı zamanda doğrulamayı ve tutarlılığı korur.
  • Code First: EF'in kod ilk paradigmasında kolaylık sağlamak için. Code First'da, uygulamadaki sınıflar temel alınan veritabanı yapılarına saydam olarak eşlenir. Uygulama kodu, temel alınan veritabanı işlemeye dahil olan çoğu yönü maskeleyen DbSet'lerle etkileşim kurar.
  • Şema: Entity Framework, geçişler aracılığıyla ilk veritabanı şeması oluşturmayı ve sonraki şema evrimlerini işler. Bu özellikleri koruyarak, veriler geliştikçe uygulamanızı uyarlamak kolaydır.

Aşağıdaki kılavuz, elastik veritabanı araçlarını kullanarak Code First uygulamaları için bu gereksinimlerin nasıl karşılanması konusunda bilgi sağlar.

EF DbContext kullanarak verilere bağımlı yönlendirme

Entity Framework ile veritabanı bağlantıları genellikle DbContext'in alt sınıfları aracılığıyla yönetilir. DbContext'ten türeterek bu alt sınıfları oluşturun. Burası, uygulamanız için veritabanı destekli CLR nesneleri koleksiyonlarını uygulayan DbSet'lerinizi tanımladığınız yerdir. Verilere bağımlı yönlendirme bağlamında, diğer EF kodu ilk uygulama senaryoları için mutlaka barındırılmayan birkaç yararlı özellik tanımlayabilirsiniz:

  • Veritabanı zaten var ve elastik veritabanı parça eşlemesine kaydedildi.
  • Uygulamanın şeması veritabanına zaten dağıtılmıştır (aşağıda açıklanmıştır).
  • Veritabanına yönelik verilere bağımlı yönlendirme bağlantıları, parça eşlemesi tarafından aracılık edilir.

DbContexts'i ölçeği genişletmeye yönelik verilere bağımlı yönlendirmeyle tümleştirmek için:

  1. Parça eşleme yöneticisinin elastik veritabanı istemci arabirimleri aracılığıyla fiziksel veritabanı bağlantıları oluşturun.
  2. Bağlantıyı DbContext alt sınıfıyla sarmalama
  3. EF tarafındaki tüm işlemlerin de gerçekleştiğinden emin olmak için bağlantıyı DbContext temel sınıflarına geçirin.

Aşağıdaki kod örneğinde bu yaklaşım gösterilmektedir. (Bu kod, birlikte gelen Visual Studio projesinde de mevcuttur)

public class ElasticScaleContext<T> : DbContext
{
public DbSet<Blog> Blogs { get; set; }
...

    // C'tor for data-dependent routing. This call opens a validated connection
    // routed to the proper shard by the shard map manager.
    // Note that the base class c'tor call fails for an open connection
    // if migrations need to be done and SQL credentials are used. This is the reason for the
    // separation of c'tors into the data-dependent routing case (this c'tor) and the internal c'tor for new shards.
    public ElasticScaleContext(ShardMap shardMap, T shardingKey, string connectionStr)
        : base(CreateDDRConnection(shardMap, shardingKey, connectionStr),
        true /* contextOwnsConnection */)
    {
    }

    // Only static methods are allowed in calls into base class c'tors.
    private static DbConnection CreateDDRConnection(
    ShardMap shardMap,
    T shardingKey,
    string connectionStr)
    {
        // No initialization
        Database.SetInitializer<ElasticScaleContext<T>>(null);

        // Ask shard map to broker a validated connection for the given key
        SqlConnection conn = shardMap.OpenConnectionForKey<T>
                            (shardingKey, connectionStr, ConnectionOptions.Validate);
        return conn;
    }

Ana noktalar

  • Yeni bir oluşturucu, DbContext alt sınıfında varsayılan oluşturucunun yerini alır

  • Yeni oluşturucu, elastik veritabanı istemci kitaplığı aracılığıyla verilere bağımlı yönlendirme için gereken bağımsız değişkenleri alır:

    • veriye bağımlı yönlendirme arabirimlerine erişmek için parça eşlemesi,
    • shardlet'i tanımlamak için parçalama anahtarı,
    • parçaya veriye bağımlı yönlendirme bağlantısının kimlik bilgilerini içeren bir bağlantı dizesi.
  • Temel sınıf oluşturucusuna yapılan çağrı, verilere bağımlı yönlendirme için gerekli tüm adımları gerçekleştiren statik bir yönteme bir detour alır.

    • Açık bağlantı kurmak için parça eşlemesinde elastik veritabanı istemci arabirimlerinin Open Bağlan ionForKey çağrısını kullanır.
    • Parça eşlemesi, verilen parçalama anahtarının parçacıklarını tutan parçaya açık bağlantı oluşturur.
    • Bu açık bağlantı, EF'nin otomatik olarak yeni bir bağlantı oluşturmasına izin vermek yerine BU bağlantının EF tarafından kullanılacağını belirtmek için DbContext'in temel sınıf oluşturucusna geri geçirilir. Bu şekilde bağlantı, parça eşleme yönetimi işlemleri altında tutarlılığı garanti edebilmesi için elastik veritabanı istemci API'si tarafından etiketlenmiştir.

Kodunuzda varsayılan oluşturucu yerine DbContext alt sınıfınız için yeni oluşturucuyu kullanın. Örnek aşağıda verilmiştir:

// Create and save a new blog.

Console.Write("Enter a name for a new blog: ");
var name = Console.ReadLine();

using (var db = new ElasticScaleContext<int>(
                        sharding.ShardMap,  
                        tenantId1,  
                        connStrBldr.ConnectionString))
{
    var blog = new Blog { Name = name };
    db.Blogs.Add(blog);
    db.SaveChanges();

    // Display all Blogs for tenant 1
    var query = from b in db.Blogs
                orderby b.Name
                select b;
    …
}

Yeni oluşturucu, tenantid1 değeriyle tanımlanan parçanın verilerini tutan parça bağlantısını açar. using bloğundaki kod, tenantid1 için parça üzerinde EF kullanarak bloglar için DbSet'e erişmek için değişmeden kalır. Bu, using bloğundaki kodun semantiğini değiştirir, böylece tüm veritabanı işlemlerinin kapsamı artık tenantid1'in tutulduğu tek parça olarak belirlenir. Örneğin, DbSet blogları üzerinden yapılan bir LINQ sorgusu yalnızca geçerli parçada depolanan blogları döndürür, ancak diğer parçalarda depolanan blogları döndürmez.

Geçici hataları işleme

Microsoft Patterns & Practices ekibi, Geçici Hata İşleme Uygulama Bloğunu yayımladı. Kitaplık, EF ile birlikte elastik ölçek istemci kitaplığıyla birlikte kullanılır. Bununla birlikte, geçici özel durumların geçici bir hatadan sonra yeni oluşturucunun kullanıldığından emin olabileceğiniz bir yere döndüğünden emin olun; böylece ince ayar yaptığınız oluşturucular kullanılarak yeni bir bağlantı girişiminde bulunulmasını sağlayın. Aksi takdirde, doğru parçayla bağlantı garantilanmaz ve parça eşlemesinde değişiklikler gerçekleştiğinde bağlantının korunacağına dair bir güvence yoktur.

Aşağıdaki kod örneği, sql yeniden deneme ilkesinin yeni DbContext alt sınıf oluşturucuları etrafında nasıl kullanılabileceğini göstermektedir:

SqlDatabaseUtils.SqlRetryPolicy.ExecuteAction(() =>
{
    using (var db = new ElasticScaleContext<int>(
                            sharding.ShardMap,  
                            tenantId1,  
                            connStrBldr.ConnectionString))
        {
                var blog = new Blog { Name = name };
                db.Blogs.Add(blog);
                db.SaveChanges();
        …
        }
    });

Yukarıdaki koddaki SqlDatabaseUtils.SqlRetryPolicy , yeniden deneme sayısı 10 olan bir SqlDatabaseTransientErrorDetectionStrategy ve yeniden denemeler arasında 5 saniye bekleme süresi olarak tanımlanır. Bu yaklaşım, EF ve kullanıcı tarafından başlatılan işlemlere yönelik yönergelere benzer (bkz . Yürütme Stratejilerini Yeniden Deneme Sınırlamaları (EF6 devamı). Her iki durumda da uygulama programının geçici özel durumun döndürdüğü kapsamı denetlemesi gerekir: işlemi yeniden açmak veya (gösterildiği gibi) elastik veritabanı istemci kitaplığını kullanan uygun oluşturucudan bağlamı yeniden oluşturmak.

Geçici özel durumların bizi kapsama geri aldığı yeri denetleme gereksinimi, EF ile birlikte gelen yerleşik SqlAzureExecutionStrategy kullanımını da ortadan kaldırıyor. SqlAzureExecutionStrategy bir bağlantıyı yeniden açar ancak Open Bağlan ionForKey kullanmaz ve bu nedenle Open Bağlan ionForKey çağrısının parçası olarak gerçekleştirilen tüm doğrulamayı atlar. Bunun yerine kod örneği, EF ile birlikte gelen yerleşik DefaultExecutionStrategy'yi kullanır. SqlAzureExecutionStrategy'nin aksine, Geçici Hata İşleme'den yeniden deneme ilkesiyle birlikte doğru şekilde çalışır. Yürütme ilkesi ElasticScaleDbConfiguration sınıfında ayarlanır. Geçici özel durumlar oluşursa SqlAzureExecutionStrategy kullanılmasını önerdiğinden DefaultSqlExecutionStrategy kullanmamaya karar verdik ve bu da açıklandığı gibi yanlış davranışa yol açabilir. Farklı yeniden deneme ilkeleri ve EF hakkında daha fazla bilgi için bkz. EF'de Bağlan Dayanıklılık.

Oluşturucu yeniden yazmaları

Yukarıdaki kod örneklerinde, Entity Framework ile verilere bağımlı yönlendirmeyi kullanmak için uygulamanız için gereken varsayılan oluşturucu yeniden yazma işlemleri gösterilmektedir. Aşağıdaki tabloda bu yaklaşım diğer oluşturuculara genelleştirlenmektedir.

Geçerli Oluşturucu Veriler için Yeniden Yazılan Oluşturucu Temel Oluşturucu Notlar
MyContext() ElasticScaleContext(ShardMap, TKey) DbContext(Db Bağlan ion, bool) Bağlantının parça eşlemesinin ve verilere bağımlı yönlendirme anahtarının bir işlevi olması gerekir. Ef tarafından otomatik bağlantı oluşturma işlemini by-pass yapmanız ve bunun yerine bağlantının aracısını oluşturmak için parça eşlemesini kullanmanız gerekir.
MyContext(dize) ElasticScaleContext(ShardMap, TKey) DbContext(Db Bağlan ion, bool) Bağlantı, parça eşlemesinin ve verilere bağımlı yönlendirme anahtarının bir işlevidir. Sabit veritabanı adı veya bağlantı dizesi, parça eşlemesi tarafından by-pass doğrulaması yaptıkları için çalışmaz.
MyContext(DbCompiledModel) ElasticScaleContext(ShardMap, TKey, DbCompiledModel) DbContext(Db Bağlan ion, DbCompiledModel, bool) Verilen parça eşlemesi ve sağlanan modelle parçalama anahtarı için bağlantı oluşturulur. Derlenen model temel oluşturucuya geçirilir.
MyContext(Db Bağlan ion, bool) ElasticScaleContext(ShardMap, TKey, bool) DbContext(Db Bağlan ion, bool) Bağlantının parça eşlemesinden ve anahtardan çıkarılması gerekir. Giriş olarak sağlanamaz (bu giriş zaten parça eşlemesini ve anahtarı kullanmıyorsa). Boole değeri iletilir.
MyContext(string, DbCompiledModel) ElasticScaleContext(ShardMap, TKey, DbCompiledModel) DbContext(Db Bağlan ion, DbCompiledModel, bool) Bağlantının parça eşlemesinden ve anahtardan çıkarılması gerekir. Giriş olarak sağlanamaz (bu giriş parça eşlemesini ve anahtarı kullanmıyorsa). Derlenen model geçirilir.
MyContext(ObjectContext, bool) ElasticScaleContext(ShardMap, TKey, ObjectContext, bool) DbContext(ObjectContext, bool) Yeni oluşturucunun, giriş olarak geçirilen ObjectContext içindeki tüm bağlantıların Elastik Ölçek tarafından yönetilen bir bağlantıya yeniden yönlendirildiğinden emin olması gerekir. ObjectContexts'in ayrıntılı bir tartışması bu belgenin kapsamı dışındadır.
MyContext(Db Bağlan ion, DbCompiledModel, bool) ElasticScaleContext(ShardMap, TKey, DbCompiledModel, bool) DbContext(Db Bağlan ion, DbCompiledModel, bool); Bağlantının parça eşlemesinden ve anahtardan çıkarılması gerekir. Bağlantı giriş olarak sağlanamaz (bu giriş zaten parça eşlemesini ve anahtarı kullanmıyorsa). Model ve Boole değeri temel sınıf oluşturucusunun üzerine geçirilir.

EF geçişleri aracılığıyla parça şeması dağıtımı

Otomatik şema yönetimi, Entity Framework tarafından sağlanan bir kolaylıktır. Elastik veritabanı araçlarını kullanan uygulamalar bağlamında, veritabanları parçalı uygulamaya eklendiğinde şemayı yeni oluşturulan parçalara otomatik olarak sağlama özelliğini korumak istiyorsunuz. Birincil kullanım örneği, EF kullanan parçalı uygulamaların veri katmanındaki kapasiteyi artırmaktır. EF'nin şema yönetimi özelliklerine güvenmek, EF üzerinde oluşturulmuş parçalı bir uygulamayla veritabanı yönetimi çabasını azaltır.

EF geçişleri aracılığıyla şema dağıtımı en iyi şekilde açılmamış bağlantılarda çalışır. Bu, esnek veritabanı istemci API'sinin sağladığı açık bağlantıyı kullanan verilere bağımlı yönlendirme senaryosunun aksinedir. Bir diğer fark da tutarlılık gereksinimidir: Eş zamanlı parça eşlemesi işlemeye karşı koruma sağlamak üzere tüm verilere bağımlı yönlendirme bağlantılarında tutarlılık sağlanması istense de, henüz parça eşlemesine kaydedilmemiş ve parçaları tutmak için henüz ayrılmamış yeni bir veritabanına ilk şema dağıtımıyla ilgili bir sorun değildir. Bu nedenle, verilere bağımlı yönlendirme yerine bu senaryo için normal veritabanı bağlantılarına güvenebilirsiniz.

Bu, EF geçişleri aracılığıyla şema dağıtımının, yeni veritabanının uygulamanın parça eşlemesine parça olarak kaydedilmesiyle sıkı bir şekilde birleştiğinde bir yaklaşıma yol açar. Bu, aşağıdaki önkoşullara bağlıdır:

  • Veritabanı zaten oluşturulmuş.
  • Veritabanı boş; hiçbir kullanıcı şeması ve kullanıcı verisi içermiyor.
  • Veritabanına henüz verilere bağımlı yönlendirme için elastik veritabanı istemci API'leri üzerinden erişilemiyor.

Bu önkoşullar uygulandığında, şema dağıtımı için EF geçişlerini başlatmak için normal bir açılmamış Sql Bağlan ion oluşturabilirsiniz. Aşağıdaki kod örneği bu yaklaşımı göstermektedir.

// Enter a new shard - i.e. an empty database - to the shard map, allocate a first tenant to it  
// and kick off EF initialization of the database to deploy schema

public void RegisterNewShard(string server, string database, string connStr, int key)
{

    Shard shard = this.ShardMap.CreateShard(new ShardLocation(server, database));

    SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(connStr);
    connStrBldr.DataSource = server;
    connStrBldr.InitialCatalog = database;

    // Go into a DbContext to trigger migrations and schema deployment for the new shard.
    // This requires an un-opened connection.
    using (var db = new ElasticScaleContext<int>(connStrBldr.ConnectionString))
    {
        // Run a query to engage EF migrations
        (from b in db.Blogs
            select b).Count();
    }

    // Register the mapping of the tenant to the shard in the shard map.
    // After this step, data-dependent routing on the shard map can be used

    this.ShardMap.CreatePointMapping(key, shard);
}

Bu örnek, parça eşlemesine parça kaydeden, EF geçişleri aracılığıyla şemayı dağıtan ve parçalama anahtarının parçaya eşlemesini depolayan RegisterNewShard yöntemini gösterir. Giriş olarak bir SQL bağlantı dizesi alan DbContext alt sınıfının (örnekte ElasticScaleContext) oluşturucusunda kullanılır. Bu oluşturucunun kodu, aşağıdaki örnekte gösterildiği gibi doğrudan yapılır:

// C'tor to deploy schema and migrations to a new shard
protected internal ElasticScaleContext(string connectionString)
    : base(SetInitializerForConnection(connectionString))
{
}

// Only static methods are allowed in calls into base class c'tors
private static string SetInitializerForConnection(string connectionString)
{
    // You want existence checks so that the schema can get deployed
    Database.SetInitializer<ElasticScaleContext<T>>(
new CreateDatabaseIfNotExists<ElasticScaleContext<T>>());

    return connectionString;
}

Biri, temel sınıftan devralınan oluşturucunun sürümünü kullanmış olabilir. Ancak kodun bağlanırken EF için varsayılan başlatıcının kullanıldığından emin olması gerekir. Bu nedenle, bağlantı dizesi ile temel sınıf oluşturucusuna çağırmadan önce statik yönteme kısa sapma. EF başlatıcı ayarlarının çakışmadığından emin olmak için parçaların kaydının farklı bir uygulama etki alanında veya işlemde çalıştırılması gerektiğini unutmayın.

Sınırlamalar

Bu belgede özetlenen yaklaşımlar birkaç sınırlama gerektirir:

  • LocalDb kullanan EF uygulamalarının elastik veritabanı istemci kitaplığını kullanmadan önce normal bir SQL Server veritabanına geçirilmesi gerekir. LocalDb ile Elastik Ölçek ile parçalama yoluyla bir uygulamanın ölçeğini genişletmek mümkün değildir. Geliştirmenin Hala LocalDb kullanabileceğini unutmayın.
  • Uygulamada veritabanı şeması değişikliklerini ima eden tüm değişikliklerin tüm parçalarda EF geçişlerinden geçmesi gerekir. Bu belgenin örnek kodu bunun nasıl yapılacağını göstermez. Tüm parçalar üzerinde yineleme yapmak için Update-Database'i bir Bağlan ionString parametresiyle kullanmayı göz önünde bulundurun veya -Script seçeneğiyle Update-Database kullanarak bekleyen geçiş için T-SQL betiğini ayıklayın ve parçalarınıza T-SQL betiğini uygulayın.
  • bir istek verildiğinde, tüm veritabanı işlemlerinin istek tarafından sağlanan parçalama anahtarı tarafından tanımlanan tek bir parça içinde yer aldığı varsayılır. Ancak, bu varsayım her zaman true tutmaz. Örneğin, bir parçalama anahtarını kullanılabilir hale getirmek mümkün olmadığında. Bunu ele almak için istemci kitaplığı, birkaç parça üzerinden sorgulama için bir bağlantı soyutlaması uygulayan MultiShardQuery sınıfını sağlar. MultiShardQuery'yi EF ile birlikte kullanmayı öğrenmek bu belgenin kapsamının dışındadır

Sonuç

Bu belgede özetlenen adımlarda EF uygulamaları, EF uygulamasında kullanılan DbContext alt sınıflarının oluşturucularını yeniden düzenleyerek esnek veritabanı istemci kitaplığının verilere bağımlı yönlendirme özelliğini kullanabilir. Bu, DbContext sınıflarının zaten bulunduğu yerlerde gereken değişiklikleri sınırlar. Ayrıca EF uygulamaları, gerekli EF geçişlerini çağıran adımları parça eşlemesindeki yeni parçaların ve eşlemelerin kaydıyla birleştirerek otomatik şema dağıtımından yararlanmaya devam edebilir.

Ek kaynaklar

Elastik veritabanı araçlarını henüz kullanmıyor musunuz? Başlarken Kılavuzumuza göz atın. Sorular için, SQL Veritabanı ve özellik istekleri için Microsoft Soru-Cevap soru sayfasından bizimle iletişime geçin, yeni fikirler ekleyin veya SQL Veritabanı geri bildirim forumunda mevcut fikirler için oy verin.