Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Warning
Pekerjaan ekstensif telah dilakukan pada penyedia Azure Cosmos DB versi 9.0. Untuk meningkatkan penyedia layanan, sejumlah perubahan besar yang berdampak tinggi harus dilakukan; jika Anda memperbarui aplikasi yang ada, silakan baca bagian perubahan besar 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.
Note
Penyedia ini hanya berfungsi dengan Azure Cosmos DB untuk NoSQL.
Install
Instal paket Microsoft.EntityFrameworkCore.Cosmos NuGet.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Get started
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");
Warning
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 ini, Order adalah entitas sederhana dengan referensi ke jenis yang dimilikiStreetAddress.
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();
}
Important
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.
Important
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) |
RBAC dan Token Sumber Daya |
| Rangkaian 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.