Sdílet prostřednictvím


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.