Dostawca Azure Cosmos DB dla rozwiązania EF Core

Ostrzeżenie

Obszerne prace zostały wprowadzone do dostawcy usługi Cosmos DB w wersji 9.0. Aby poprawić dostawcę, należy wprowadzić szereg zmian powodujących niezgodność; Jeśli uaktualniasz istniejącą aplikację, przeczytaj uważnie sekcję zmian powodujących niezgodność.

Ten dostawca baz danych umożliwia używanie rozwiązania Entity Framework Core z usługą Azure Cosmos DB. Dostawca jest utrzymywany w ramach projektu Entity Framework Core Project.

Zdecydowanie zalecamy zapoznanie się z dokumentacją usługi Azure Cosmos DB przed przeczytaniem tej sekcji.

Uwaga

Ten dostawca działa tylko z usługą Azure Cosmos DB for NoSQL.

Instalowanie

Zainstaluj pakiet NuGet Microsoft.EntityFrameworkCore.Cosmos.

dotnet add package Microsoft.EntityFrameworkCore.Cosmos

Rozpocznij

Napiwek

Przykład z tego artykułu można zobaczyć w witrynie GitHub.

Podobnie jak w przypadku innych dostawców, pierwszym krokiem jest wywołanie metody UseCosmos:

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

Ostrzeżenie

Punkt końcowy i klucz są tutaj zakodowane na stałe, ale w aplikacji produkcyjnej powinny one być bezpiecznie przechowywane. Zobacz Łączenie i uwierzytelnianie , aby uzyskać różne sposoby nawiązywania połączenia z usługą Azure Cosmos DB.

W tym przykładzie Order jest to prosta jednostka z odwołaniem do typu StreetAddressnależącego do .

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

Zapisywanie danych i uruchamianie zapytań odbywa się zgodnie z normalnym wzorcem rozwiązania 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();
}

Ważne

Wywołanie metody EnsureCreatedAsync jest konieczne, aby utworzyć wymagane kontenery i wstawić dane inicjujące, jeśli istnieją w modelu. Jednak metoda EnsureCreatedAsync powinna być wywoływana tylko podczas wdrażania, a nie podczas normalnego działania, ponieważ może to powodować problemy z wydajnością.

Zestaw SDK usługi Azure Cosmos DB nie obsługuje kontroli dostępu opartej na rolach na potrzeby operacji płaszczyzny zarządzania w usłudze Azure Cosmos DB. Użyj interfejsu API usługi Azure Management zamiast polecenia EnsureCreatedAsync z kontrolą dostępu opartą na rolach.

Łączenie i uwierzytelnianie

Dostawca usługi Azure Cosmos DB dla platformy EF Core ma wiele przeciążeń metody UseCosmos . Te przeciążenia obsługują różne sposoby nawiązywania połączenia z bazą danych oraz różne sposoby zapewniania bezpieczeństwa połączenia.

Ważne

Pamiętaj, aby zrozumieć bezpieczny dostęp do danych w usłudze Azure Cosmos DB, aby zrozumieć implikacje dotyczące zabezpieczeń i najlepsze rozwiązania dotyczące używania UseCosmos każdego przeciążenia metody.

Mechanizm połączenia Przeciążenie UseCosmos Więcej informacji
Punkt końcowy konta i klucz UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) Klucze podstawowe/pomocnicze
Punkt końcowy konta i token UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) Tokeny zasobów
Connection string UseCosmos<DbContext>(connectionString, databaseName) Praca z kluczami konta i parametry połączenia

Opcje usługi Azure Cosmos DB

Istnieje również możliwość skonfigurowania dostawcy usługi Azure Cosmos DB przy użyciu jednego parametry połączenia i określenia innych opcji dostosowywania połączenia:

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

Powyższy kod pokazuje niektóre możliwe opcje — nie są one przeznaczone do użycia w tym samym czasie. Zapoznaj się z dokumentacją opcji usługi Azure Cosmos DB, aby uzyskać szczegółowy opis efektów każdej z powyższych opcji.