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 StreetAddress
baş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.