Aracılığıyla paylaş


EF Core Azure Cosmos DB Sağlayıcısı

Uyarı

9.0'da Azure Cosmos DB sağlayıcısına kapsamlı çalışmalar eklendi. Sağlayıcıyı geliştirmek için bir dizi yüksek etkili hataya neden olan değişikliklerin yapılması gerekiyordu; Mevcut bir uygulamayı yükseltiyorsanız, lütfen hataya neden olan değişiklikler bölümünü dikkatle okuyun.

Bu veritabanı sağlayıcısı Entity Framework Core'un Azure Cosmos DB ile birlikte kullanılmasına izin verir. Sağlayıcı Entity Framework Core Projesi kapsamında tutulur.

Bu bölümü okumadan önce Azure Cosmos DB belgeleri hakkında bilgi sahibi olmanız kesinlikle önerilir.

Not

Bu sağlayıcı yalnızca NoSQL için Azure Cosmos DB ile çalışır.

Yükleme

Microsoft.EntityFrameworkCore.Cosmos NuGet paketini yükleyin.

dotnet add package Microsoft.EntityFrameworkCore.Cosmos

Kullanmaya başlayın

İpucu

Bu makalenin örneğini GitHub'da görüntüleyebilirsiniz.

Diğer sağlayıcılar için atılacak ilk adım UseCosmos'u çağırmaktır:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.UseCosmos(
        "https://localhost:8081",
        "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
        databaseName: "OrdersDB");

Uyarı

Uç nokta ve anahtar basitlik için burada sabit kodlanmıştır, ancak bir üretim uygulamasında bunlar güvenli bir şekilde depolanmalıdır. Azure Cosmos DB'ye bağlanmanın farklı yolları için bkz . Bağlanma ve kimlik doğrulaması .

Bu örnekteOrder, sahip olunan türüne StreetAddressbaşvuru içeren basit bir varlıktır.

public class Order
{
    public int Id { get; set; }
    public int? TrackingNumber { get; set; }
    public string PartitionKey { get; set; }
    public StreetAddress ShippingAddress { get; set; }
}
public class StreetAddress
{
    public string Street { get; set; }
    public string City { get; set; }
}

Verileri kaydetme ve sorgulama normal EF desenini izler:

using (var context = new OrderContext())
{
    await context.Database.EnsureDeletedAsync();
    await context.Database.EnsureCreatedAsync();

    context.Add(
        new Order
        {
            Id = 1, ShippingAddress = new StreetAddress { City = "London", Street = "221 B Baker St" }, PartitionKey = "1"
        });

    await context.SaveChangesAsync();
}

using (var context = new OrderContext())
{
    var order = await context.Orders.FirstAsync();
    Console.WriteLine($"First order will ship to: {order.ShippingAddress.Street}, {order.ShippingAddress.City}");
    Console.WriteLine();
}

Önemli

Gerekli kapsayıcıları oluşturmak ve modelde varsa tohum verilerini eklemek için EnsureCreatedAsync çağrısı yapılması gerekir. Ancak EnsureCreatedAsync, performans sorunlarına neden olabileceği için yalnızca dağıtım sırasında çağrılmalı, normal işlem sırasında çağrılmalıdır.

Azure Cosmos DB SDK'sı, Azure Cosmos DB'deki yönetim düzlemi işlemleri için RBAC'i desteklemez. RBAC ile EnsureCreatedAsync yerine Azure Management API'sini kullanın.

Bağlanma ve kimlik doğrulaması

EF Core için Azure Cosmos DB sağlayıcısında UseCosmos yönteminin birden çok aşırı yüklemesi vardır. Bu aşırı yüklemeler, veritabanına bağlantı oluşturmanın farklı yollarını ve bağlantının güvenli olmasını sağlamanın farklı yollarını destekler.

Önemli

Yöntemin her aşırı yüklemesini kullanmaya yönelik güvenlik etkilerini ve en iyi yöntemleri anlamak için Azure Cosmos DB'deki verilere güvenli erişimi anladığınızdan UseCosmos emin olun. Genellikle, belirteç kimlik bilgilerine sahip RBAC önerilen erişim denetimi mekanizmasıdır.

Bağlantı Mekanizması UseCosmos Aşırı Yüklemesi Daha Fazla Bilgi
Hesap uç noktası ve anahtarı UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) Birincil/ikincil anahtarlar
Hesap uç noktası ve belirteç UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) RBAC ve Kaynak belirteçleri
Connection string UseCosmos<DbContext>(connectionString, databaseName) Hesap anahtarları ve bağlantı dizesi ile çalışma

Azure Cosmos DB seçenekleri

Azure Cosmos DB sağlayıcısını tek bir bağlantı dizesi ile yapılandırmak ve bağlantıyı özelleştirmek için diğer seçenekleri belirtmek de mümkündür:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.UseCosmos(
        "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
        databaseName: "OptionsDB",
        options =>
        {
            options.ConnectionMode(ConnectionMode.Gateway);
            options.WebProxy(new WebProxy());
            options.LimitToEndpoint();
            options.Region(Regions.AustraliaCentral);
            options.GatewayModeMaxConnectionLimit(32);
            options.MaxRequestsPerTcpConnection(8);
            options.MaxTcpConnectionsPerEndpoint(16);
            options.IdleTcpConnectionTimeout(TimeSpan.FromMinutes(1));
            options.OpenTcpConnectionTimeout(TimeSpan.FromMinutes(1));
            options.RequestTimeout(TimeSpan.FromMinutes(1));
        });

Yukarıdaki kod bazı olası seçenekleri gösterir; bunlar aynı anda kullanılmak üzere tasarlanmamıştır. Yukarıda bahsedilen her seçeneğin etkisinin ayrıntılı açıklaması için Azure Cosmos DB Seçenekleri belgelerine bakın.