Bagikan melalui


Penyedia Azure Cosmos DB EF Core

Peringatan

Pekerjaan ekstensif telah masuk ke penyedia Azure Cosmos DB di 9.0. Untuk meningkatkan penyedia, sejumlah perubahan yang melanggar berdampak tinggi harus dilakukan; jika Anda meningkatkan aplikasi yang ada, silakan baca bagian perubahan yang melanggar dengan hati-hati.

Penyedia database ini memungkinkan Entity Framework Core digunakan dengan Azure Cosmos DB. Penyedia dipertahankan sebagai bagian dari Proyek Entity Framework Core.

Sangat disarankan untuk membiasakan diri Anda dengan dokumentasi Azure Cosmos DB sebelum membaca bagian ini.

Catatan

Penyedia ini hanya berfungsi dengan Azure Cosmos DB untuk NoSQL.

Instal

Instal paket Microsoft.EntityFrameworkCore.Cosmos NuGet.

dotnet add package Microsoft.EntityFrameworkCore.Cosmos

Memulai

Tip

Anda dapat melihat contoh artikel ini di GitHub.

Untuk penyedia lain, langkah pertama adalah memanggil UseCosmos:

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

Peringatan

Titik akhir dan kunci di sini di-hardcode demi kemudahan, tetapi dalam aplikasi produksi ini harus disimpan dengan aman. Lihat Menyambungkan dan mengautentikasi untuk berbagai cara untuk menyambungkan ke Azure Cosmos DB.

Dalam contoh Order ini adalah entitas sederhana dengan referensi ke jenis StreetAddressyang dimiliki .

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; }
}

Menyimpan dan mengkueri data mengikuti pola EF konvensional:

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();
}

Penting

Memanggil EnsureCreatedAsync diperlukan untuk membuat kontainer yang diperlukan dan memasukkan seed data jika ada dalam model. Namun EnsureCreatedAsync hanya boleh dipanggil selama penyebaran, bukan operasi normal, karena dapat menyebabkan masalah performa.

Azure Cosmos DB SDK tidak mendukung RBAC untuk operasi sarana manajemen di Azure Cosmos DB. Gunakan AZURE Management API alih-alih EnsureCreatedAsync dengan RBAC.

Menyambungkan dan mengautentikasi

Penyedia Azure Cosmos DB untuk EF Core memiliki beberapa kelebihan beban metode UseCosmos . Kelebihan beban ini mendukung berbagai cara agar koneksi dapat dibuat ke database, dan berbagai cara untuk memastikan bahwa koneksi aman.

Penting

Pastikan untuk memahami Akses aman ke data di Azure Cosmos DB untuk memahami implikasi keamanan dan praktik terbaik untuk menggunakan setiap kelebihan beban UseCosmos metode. Umumnya, RBAC dengan kredensial token adalah mekanisme kontrol akses yang direkomendasikan.

Mekanisme Koneksi Kelebihan Beban UseCosmos Informasi selengkapnya
Titik akhir dan kunci akun UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) Kunci primer/sekunder
Titik akhir dan token akun UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) Token RBAC dan Sumber Daya
String koneksi UseCosmos<DbContext>(connectionString, databaseName) Bekerja dengan kunci akun dan string koneksi

Opsi Azure Cosmos DB

Dimungkinkan juga untuk mengonfigurasi penyedia Azure Cosmos DB dengan satu string koneksi dan menentukan opsi lain untuk menyesuaikan koneksi:

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));
        });

Kode di atas menunjukkan beberapa opsi yang mungkin - ini tidak dimaksudkan untuk digunakan pada saat yang sama. Lihat dokumentasi Opsi Azure Cosmos DB untuk deskripsi mendetail tentang efek dari setiap opsi yang disebutkan di atas.