Poskytovatel Azure Cosmos DB pro EF Core
Upozorňující
Rozsáhlá práce přešla do poskytovatele služby Azure Cosmos DB ve verzi 9.0. Aby bylo možné poskytovatele zlepšit, bylo nutné provést řadu zásadních změn s vysokým dopadem; Pokud upgradujete existující aplikaci, přečtěte si část zásadních změn pečlivě.
Tento poskytovatel databáze umožňuje použít Entity Framework Core s Azure Cosmos DB. Tento poskytovatel je součástí projektu Entity Framework Core.
Před přečtením této části důrazně doporučujeme seznámit se s dokumentací ke službě Azure Cosmos DB.
Poznámka:
Tento poskytovatel funguje jenom se službou Azure Cosmos DB for NoSQL.
Instalace
Nainstalujte si balíček Microsoft.EntityFrameworkCore.Cosmos NuGet.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Začínáme
Tip
Ukázku pro tento článek najdete na GitHubu.
Stejně jako u jiných poskytovatelů je prvním krokem volání UseCosmos:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
"https://localhost:8081",
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
databaseName: "OrdersDB");
Upozorňující
Koncový bod a klíč jsou zde kvůli jednoduchosti pevně zakódovány, ale v produkční aplikaci by měly být bezpečně uloženy. Další způsoby připojení ke službě Azure Cosmos DB najdete v tématu Připojení a ověřování .
V tomto příkladu Order
je jednoduchá entita s odkazem na vlastněný typ 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; }
}
Ukládání a dotazování dat se řídí běžným vzorem 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();
}
Důležité
Volání EnsureCreatedAsync je nezbytné k vytvoření požadovaných kontejnerů a k vložení počátečních dat, pokud se v modelu nacházejí. EnsureCreatedAsync
by se však mělo volat jen během nasazování a nikoli při běžném provozu, protože může způsobit problémy s výkonem.
Sada Azure Cosmos DB SDK nepodporuje řízení přístupu na základě role pro operace roviny správy ve službě Azure Cosmos DB. Místo příkazu EnsureCreatedAsync s RBAC použijte rozhraní API služby Azure Management.
Připojení a ověřování
Zprostředkovatel služby Azure Cosmos DB pro EF Core má více přetížení metody UseCosmos . Tato přetížení podporují různé způsoby, jak lze vytvořit připojení k databázi, a různé způsoby zajištění zabezpečení připojení.
Důležité
Ujistěte se, že rozumíte zabezpečenému přístupu k datům ve službě Azure Cosmos DB, abyste porozuměli důsledkům zabezpečení a osvědčeným postupům při používání každého přetížení UseCosmos
této metody.
Obecně platí, že RBAC s přihlašovacími údaji tokenu je doporučený mechanismus řízení přístupu.
Mechanismus připojení | UseCosmos – přetížení | Více informací |
---|---|---|
Koncový bod a klíč účtu | UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) |
Primární/sekundární klíče |
Koncový bod účtu a token | UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) |
RBAC a tokeny prostředků |
Connection string | UseCosmos<DbContext>(connectionString, databaseName) |
Práce s klíči účtu a připojovací řetězec |
Možnosti služby Azure Cosmos DB
Je také možné nakonfigurovat poskytovatele služby Azure Cosmos DB s jedním připojovací řetězec a zadat další možnosti pro přizpůsobení připojení:
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));
});
Výše uvedený kód ukazuje některé možné možnosti – nejsou určeny k použití ve stejnou dobu. Podrobný popis účinku jednotlivých výše uvedených možností najdete v dokumentaci k možnostem Azure Cosmos DB.