Dostawca Azure Cosmos DB dla rozwiązania EF Core
Ostrzeżenie
Obszerne prace zostały wprowadzone do dostawcy usługi Azure 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 StreetAddress
należą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.
Ogólnie rzecz biorąc, kontrola dostępu oparta na rolach z poświadczeniami tokenu jest zalecanym mechanizmem kontroli dostępu.
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) |
Kontrola dostępu oparta na rolach i 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.