Поставщик EF Core для Azure Cosmos DB
Предупреждение
Обширная работа прошла в поставщике Azure Cosmos DB в версии 9.0. Для улучшения поставщика необходимо вносить ряд критически важных изменений; Если вы обновляете существующее приложение, внимательно ознакомьтесь с разделом критических изменений.
Этот поставщик базы данных позволяет использовать Entity Framework Core с Azure Cosmos DB. Работы над этим поставщиком ведутся в рамках проекта Entity Framework Core.
Перед чтением этого раздела мы настоятельно рекомендуем ознакомиться с документацией по Azure Cosmos DB.
Примечание
Этот поставщик работает только с Azure Cosmos DB для NoSQL.
Установите пакет NuGet Microsoft.EntityFrameworkCore.Cosmos.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Совет
Вы можете скачать используемый в этой статье пример из репозитория GitHub.
Как и для других поставщиков, сначала нужно вызвать UseCosmos.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
"https://localhost:8081",
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
databaseName: "OrdersDB");
Предупреждение
Для простоты конечная точка и ключ здесь заданы в коде, но в рабочем приложении необходимо обеспечить их безопасное хранение. Сведения о подключении и проверке подлинности различных способов подключения к Azure Cosmos DB.
В этом примере Order
представляет собой простую сущность, ссылающуюся на StreetAddress
зависимого типа.
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; }
}
Сохранение данных и запрос на их получение выполняется, как обычно в EF:
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();
}
Важно!
Путем вызова EnsureCreatedAsync вы создадите требуемые контейнеры и вставите начальные данные, если они есть в модели. Но EnsureCreatedAsync
следует вызывать только во время развертывания, а не в рабочем режиме, так как это может вызвать проблемы с производительностью.
Пакет SDK Azure Cosmos DB не поддерживает RBAC для операций плоскости управления в Azure Cosmos DB. Используйте API управления Azure вместо EnsureCreatedAsync с RBAC.
Поставщик Azure Cosmos DB для EF Core имеет несколько перегрузок метода UseCosmos . Эти перегрузки поддерживают различные способы подключения к базе данных и различные способы обеспечения безопасности подключения.
Важно!
Обязательно понять безопасный доступ к данным в Azure Cosmos DB, чтобы понять последствия безопасности и рекомендации по использованию каждой перегрузки UseCosmos
метода.
Как правило, RBAC с учетными данными токена — это рекомендуемый механизм управления доступом.
Механизм подключения | Перегрузка UseCosmos | Дополнительные сведения |
---|---|---|
Конечная точка и ключ учетной записи | UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) |
Первичные/вторичные ключи |
Конечная точка и маркер учетной записи | UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) |
RBAC и маркеры ресурсов |
Connection string | UseCosmos<DbContext>(connectionString, databaseName) |
Работа с ключами учетной записи и строка подключения |
Также можно настроить поставщик Azure Cosmos DB с одним строка подключения и указать другие параметры настройки подключения:
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));
});
Приведенный выше код показывает некоторые возможные параметры. Они не предназначены для одновременного использования. Подробное описание каждого из указанных выше параметров см. в документации по параметрам Azure Cosmos DB.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: