Provider di Azure Cosmos DB per EF Core
Avviso
Un'ampia gamma di attività è stata inserita nel provider Azure Cosmos DB nella versione 9.0. Per migliorare il provider, è stato necessario apportare una serie di modifiche di rilievo ad alto impatto; se si sta aggiornando un'applicazione esistente, leggere attentamente la sezione modifiche di rilievo.
Questo provider di database consente l'uso di Entity Framework Core con Azure Cosmos DB. Il provider viene gestito nell'ambito del progetto Entity Framework Core.
Prima di leggere questa sezione, è consigliabile acquisire familiarità con la documentazione di Azure Cosmos DB.
Nota
Questo provider funziona solo con Azure Cosmos DB for NoSQL.
Installa
Installare il pacchetto NuGet Microsoft.EntityFrameworkCore.Cosmos.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Operazioni preliminari
Suggerimento
È possibile visualizzare l'esempio di questo articolo in GitHub.
Analogamente agli altri provider, il primo passaggio consiste nel chiamare UseCosmos:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
"https://localhost:8081",
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
databaseName: "OrdersDB");
Avviso
L'endpoint e la chiave sono hardcoded qui per semplicità, ma in un'app di produzione devono essere archiviati in modo sicuro. Consultare la sezione Connessione e autenticazione per diversi modi per connettersi ad Azure Cosmos DB.
In questo esempio Order
è un'entità semplice con un riferimento al tipo di proprietà 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; }
}
Per il salvataggio e l'esecuzione di query sui dati si segue il modello EF normale:
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();
}
Importante
La chiamata di EnsureCreatedAsync è necessaria per creare i contenitori richiesti e inserire i dati di inizializzazione se presenti nel modello. Tuttavia, EnsureCreatedAsync
deve essere chiamato solo durante la distribuzione, e non durante il normale funzionamento, perché potrebbe causare problemi di prestazioni.
Azure Cosmos DB SDK non supporta il controllo degli accessi in base al ruolo per le operazioni del piano di gestione in Azure Cosmos DB. Usare l'API Gestione di Azure invece di EnsureCreatedAsync con RBAC.
Connessione e autenticazione
Il provider Azure Cosmos DB per EF Core include più overload del metodo UseCosmos . Questi overload supportano i diversi modi in cui è possibile stabilire una connessione al database e i diversi modi per garantire la sicurezza della connessione.
Importante
Assicurarsi di comprendere l'accesso sicuro ai dati in Azure Cosmos DB per comprendere le implicazioni per la sicurezza e le procedure consigliate per l'uso di ogni overload del metodo UseCosmos
.
In genere, il controllo degli accessi in base al ruolo con le credenziali del token è il meccanismo consigliato per il controllo di accesso.
Meccanismo di connessione | UseCosmos Overload | Ulteriori informazioni |
---|---|---|
Endpoint e chiave dell'account | UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) |
Chiavi primarie/secondarie |
Endpoint e token dell'account | UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) |
Controllo degli accessi in base al ruolo e token di risorse |
Stringa di connessione | UseCosmos<DbContext>(connectionString, databaseName) |
Usare chiavi dell'account e stringhe di connessione |
Opzioni di Azure Cosmos DB
È anche possibile configurare il provider Azure Cosmos DB con una singola stringa di connessione e specificare altre opzioni per personalizzare la connessione:
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));
});
Il codice precedente mostra alcune opzioni possibili, che non devono essere usate contemporaneamente. Per una descrizione dettagliata dell'effetto di ogni opzione indicata in precedenza, vedere la documentazione sulle opzioni per Azure Cosmos DB.