Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Warning
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.
Note
Ten dostawca działa tylko z usługą Azure Cosmos DB for NoSQL.
Install
Zainstaluj pakiet NuGet Microsoft.EntityFrameworkCore.Cosmos.
- .NET CLI (Interfejs wiersza polecenia .NET)
- w programie Visual Studio
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Wprowadzenie
Tip
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");
Warning
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 typudo .
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();
}
Important
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.
Important
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 |
| Łańcuch połączenia | 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.