Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Omfattande arbete har gjorts i Azure Cosmos DB-providern i 9.0. För att förbättra leverantören måste ett antal viktiga ändringar som bryter kompatibiliteten göras. Om du uppgraderar ett befintligt program, läs avsnittet om viktiga ändringar som bryter kompatibiliteten noggrant.
Med den här databasprovidern kan Entity Framework Core användas med Azure Cosmos DB. Providern underhålls som en del av Entity Framework Core Project.
Vi rekommenderar starkt att du bekantar dig med Azure Cosmos DB-dokumentationen innan du läser det här avsnittet.
Note
Den här providern fungerar bara med Azure Cosmos DB för NoSQL.
Install
Installera NuGet-paketet Microsoft.EntityFrameworkCore.Cosmos.
dotnet add package Microsoft.EntityFrameworkCore.Cosmos
Get started
Tip
Du kan visa den här artikelns exempel på GitHub.
När det gäller andra leverantörer är det första steget att anropa UseCosmos:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
"https://localhost:8081",
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
databaseName: "OrdersDB");
Warning
Slutpunkten och nyckeln är hårdkodade här för enkelhetens skull, men i en produktionsapp bör dessa lagras på ett säkert sätt. Se Ansluta och autentisera för olika sätt att ansluta till Azure Cosmos DB.
I det här exemplet Order är en enkel entitet med en referens till den ägda typenStreetAddress.
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; }
}
Spara och göra sökningar i data följer det normala EF-mönstret.
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
Att anropa EnsureCreatedAsync är nödvändigt för att skapa de nödvändiga containrarna och infoga startdata om de finns i modellen. Men EnsureCreatedAsync bör bara anropas under distributionen, inte normal åtgärd, eftersom det kan orsaka prestandaproblem.
Azure Cosmos DB SDK stöder inte RBAC för hanteringsplanåtgärder i Azure Cosmos DB. Använd Azure Management API i stället för EnsureCreatedAsync med RBAC.
Ansluta och autentisera
Azure Cosmos DB-leverantören för EF Core har flera överlagringar av metoden UseCosmos. Dessa överlagringar stöder de olika sätt som en anslutning kan göras till databasen på och de olika sätten att säkerställa att anslutningen är säker.
Important
Se till att förstå Säker åtkomst till data i Azure Cosmos DB för att förstå säkerhetskonsekvenserna och best practicer för att använda varje överbelastning av metoden UseCosmos.
I allmänhet är RBAC med tokenautentiseringsuppgifter den rekommenderade mekanismen för åtkomstkontroll.
| Anslutningsmekanism | UseCosmos Överbelastning | Mer information |
|---|---|---|
| Kontoslutpunkt och nyckel | UseCosmos<DbContext>(accountEndpoint, accountKey, databaseName) |
Primära/sekundära nycklar |
| Kontoslutpunkt och token | UseCosmos<DbContext>(accountEndpoint, tokenCredential, databaseName) |
RBAC- och resurstoken |
| Anslutningssträng | UseCosmos<DbContext>(connectionString, databaseName) |
Arbeta med kontonycklar och anslutningssträngar |
Azure Cosmos DB-alternativ
Du kan också konfigurera Azure Cosmos DB-providern med en enda anslutningssträng och ange andra alternativ för att anpassa anslutningen:
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));
});
Koden ovan visar några möjliga alternativ – de är inte avsedda att användas samtidigt. Se dokumentationen om Alternativ för Azure Cosmos DB för en detaljerad beskrivning av effekten av varje alternativ som nämns ovan.