Partager via


Fournisseur Azure Cosmos DB EF Core

Avertissement

Un travail considérable a été réalisé sur le fournisseur 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.

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) Jetons de ressource
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.