Delen via


EF Core Azure Cosmos DB-provider

Warning

Er is uitgebreid werk verricht aan de Azure Cosmos DB-provider in versie 9.0. Om de provider te verbeteren, moesten er een aantal belangrijke wijzigingen worden aangebracht; Lees de sectie met belangrijke wijzigingen zorgvuldig als u een upgrade uitvoert van een bestaande toepassing.

Met deze databaseprovider kan Entity Framework Core worden gebruikt met Azure Cosmos DB. De provider wordt onderhouden als onderdeel van het Entity Framework Core Project.

Het is raadzaam om vertrouwd te raken met de Documentatie van Azure Cosmos DB voordat u deze sectie leest.

Note

Deze provider werkt alleen met Azure Cosmos DB voor NoSQL.

Install

Installeer het Microsoft.EntityFrameworkCore.Cosmos NuGet-pakket.

dotnet add package Microsoft.EntityFrameworkCore.Cosmos

Get started

Net als bij andere providers is de eerste stap het aanroepen van UseCosmos:

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

Warning

Het eindpunt en de sleutel zijn hier vastgelegd om het eenvoudig te maken, maar in een productie-app moeten deze veilig worden opgeslagen. Zie Verbinding maken en verifiëren voor verschillende manieren om verbinding te maken met Azure Cosmos DB.

In dit voorbeeld is Order een eenvoudige entiteit met een verwijzing naar het eigendomstypeStreetAddress.

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

Het opslaan en opvragen van gegevens volgt het normale EF-patroon:

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

Het aanroepen van EnsureCreatedAsync is nodig om de vereiste containers te maken en de seed-gegevens in te voegen indien aanwezig in het model. Moet echter EnsureCreatedAsync alleen worden aangeroepen tijdens de implementatie, niet bij normale werking, omdat dit prestatieproblemen kan veroorzaken.

Azure Cosmos DB SDK biedt geen ondersteuning voor RBAC voor beheervlakbewerkingen in Azure Cosmos DB. Gebruik de Azure Management-API in plaats van EnsureCreatedAsync met RBAC.

Verbinding maken en verifiëren

De Azure Cosmos DB-provider voor EF Core heeft meerdere overbelastingen van de UseCosmos-methode . Deze overbelastingen ondersteunen de verschillende manieren waarop een verbinding met de database kan worden gemaakt en de verschillende manieren om ervoor te zorgen dat de verbinding veilig is.

Important

Zorg ervoor dat u veilige toegang tot gegevens in Azure Cosmos DB begrijpt om inzicht te krijgen in de gevolgen voor beveiliging en aanbevolen procedures voor het gebruik van elke overbelasting van de UseCosmos methode. Over het algemeen is RBAC met tokenreferenties het aanbevolen mechanisme voor toegangsbeheer.

Verbindingsmechanisme UseCosmos Overload Meer informatie
Accounteindpunt en -sleutel UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) Primaire/secundaire sleutels
Accounteindpunt en token UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) RBAC en Resource-tokens
verbindingsstring UseCosmos<DbContext>(connectionString, databaseName) Werken met accountsleutels en verbindingsreeksen

Opties voor Azure Cosmos DB

Het is ook mogelijk om de Azure Cosmos DB-provider te configureren met één verbindingsreeks en om andere opties op te geven om de verbinding aan te passen:

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

De bovenstaande code toont enkele mogelijke opties. Deze zijn niet bedoeld om tegelijkertijd te worden gebruikt. Zie de documentatie over Opties voor Azure Cosmos DB voor een gedetailleerde beschrijving van het effect van elke hierboven genoemde optie.