Fournisseur Azure Cosmos DB EF Core
Avertissement
Un travail considérable a été réalisé sur le fournisseur Azure Cosmos DB dans la version 9.0. Pour améliorer le fournisseur, un certain nombre de changements cassants ont dû être effectués ; si vous mettez à jour une application existante, veuillez lire attentivement la section sur les changements cassants.
Ce fournisseur de base de données permet d’utiliser Entity Framework Core avec Azure Cosmos DB. Il est géré dans le cadre du projet Entity Framework Core.
Avant de lire cette section, il est fortement recommandé de vous familiariser avec la documentation d’Azure Cosmos DB.
Remarque
Ce fournisseur fonctionne uniquement avec Azure Cosmos DB for NoSQL.
Installer
Installez le package NuGet Microsoft.EntityFrameworkCore.Cosmos.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Prise en main
Conseil
Vous pouvez afficher cet exemple sur GitHub.
Comme pour les autres fournisseurs, la première étape consiste à appeler UseCosmos :
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
"https://localhost:8081",
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
databaseName: "OrdersDB");
Avertissement
Le point de terminaison et la clé sont codés en dur ici par souci de simplicité, mais dans une application de production, ils doivent être stockés de manière sécurisée. Consultez Connexion et authentification pour découvrir différentes façons de se connecter à Azure Cosmos DB.
Dans cet exemple, Order
est une entité simple avec une référence au type détenu 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; }
}
L’enregistrement et l’interrogation des données suivent le modèle EF normal :
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
L’appel de EnsureCreatedAsync est nécessaire pour créer les conteneurs requis et insérer les données initiales si elles sont présentes dans le modèle. Toutefois, EnsureCreatedAsync
ne doit être appelé qu’au cours du déploiement, pas pendant le fonctionnement normal, car cela peut entraîner des problèmes de performances.
Le kit de développement logiciel (SDK) Azure Cosmos DB ne prend pas en charge RBAC pour les opérations de plan de gestion dans Azure Cosmos DB. Utilisez l’API de gestion Azure au lieu d'EnsureCreatedAsync avec RBAC.
Connexion et authentification
Le fournisseur Azure Cosmos DB pour EF Core a plusieurs surcharges de la méthode UseCosmos. Ces surcharges prennent en charge les différentes façons dont une connexion peut être établie à la base de données et les différentes façons de s’assurer que la connexion est sécurisée.
Important
Assurez-vous de bien assimiler Sécuriser l’accès aux données dans Azure Cosmos DB pour comprendre les implications de sécurité et les meilleures pratiques pour utiliser chaque surcharge de la méthode UseCosmos
.
En général, le contrôle d’accès basé sur les rôles (RBAC) avec des informations d’identification par jeton est le mécanisme de contrôle d’accès recommandé.
Mécanisme de connexion | Surcharge UseCosmos | Plus d’informations |
---|---|---|
Point de terminaison et clé de compte | UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) |
Clés principales/secondaires |
Point de terminaison et jeton de compte | UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) |
RBAC et jetons de ressources |
Chaîne de connexion | UseCosmos<DbContext>(connectionString, databaseName) |
Utiliser des clés de compte et des chaînes de connexion |
Options d’Azure Cosmos DB
Il est également possible de configurer le fournisseur Azure Cosmos DB avec une seule chaîne de connexion et de spécifier d’autres options pour personnaliser la connexion :
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));
});
Le code ci-dessus montre certaines options possibles, lesquelles ne sont pas destinées à être utilisées en même temps. Consultez la documentation options d’Azure Cosmos DB pour obtenir une description détaillée de l’effet de chaque option mentionnée ci-dessus.