Teilen über


Einschränkungen des EF Core Azure Cosmos DB-Anbieters

Der Azure Cosmos DB-Datenbankanbieter zielt auf den Azure Cosmos DB NoSQL-Speicher ab, bei dem es sich um eine Dokumentdatenbank handelt. Die meisten EF Core-Anbieter zielen auf relationale Datenbanken ab. Dokumentdatenbanken und relationale Datenbanken verhalten sich grundlegend anders. EF Core versucht nicht, diese Unterschiede auszublenden. Stattdessen stellt EF Core allgemeine Muster bereit, die in beiden Arten von Datenbanken erfolgreich verwendet werden können, zusammen mit Features, die auf einen bestimmten Anbieter zugeschnitten sind und bewährte Methoden für einen bestimmten Datenbanktyp befolgen. Wenn ein Feature von EF Core ein Fehler für eine bestimmte Art von Datenbank ist, implementiert der Datenbankanbieter dieses Feature in der Regel nicht und hilft stattdessen, die Verwendung in Richtung eines Pit-of-Success-Ansatzes zu lenken.

Allgemeine EF Core-Muster, die entweder nicht angewendet werden oder eine Fehlermöglichkeit sind, wenn sie eine Dokumentdatenbank verwenden, umfassen:

  • Die Schemamigration wird nicht unterstützt, da es kein definiertes Schema für die Dokumente gibt. Es könnte jedoch andere Mechanismen für den Umgang mit sich entwickelnden Daten-Shapes geben, die mit Azure Cosmos DB NoSQL sinnvoll sind, z. B. Schemaversionsverwaltungsmuster mit Azure Cosmos DB und Azure Cosmos DB-Datenmigration.
  • Reverse Engineering (Gerüst) ein Modell aus einer vorhandenen Datenbank wird nicht unterstützt. Auch hier wird dies nicht unterstützt, da kein definiertes Datenbankschema zum Erstellen eines Gerüsts vorhanden ist. Weitere Informationen finden Sie unter Verwenden der Form von Dokumenten in der Azure Cosmos DB-Datenbank, um ein Schema zu erstellen.
  • Schemakonzepte, die für das EF-Modell definiert sind, z. B. Indizes und Einschränkungen, werden ignoriert, wenn eine Dokumentdatenbank verwendet wird, da kein Schema vorhanden ist. Beachten Sie, dass Azure Cosmos DB NoSQL die automatische Indizierung von Dokumenten durchführt.
  • Das Laden von Diagrammen verwandter Entitäten aus verschiedenen Dokumenten wird nicht unterstützt. Dokumentdatenbanken sind nicht darauf ausgelegt, Verknüpfungen über viele Dokumente hinweg durchzuführen; Dies wäre sehr ineffizient. Stattdessen ist es üblicher, Daten so zu denormalisieren, dass alles, was benötigt wird, in einem oder wenigen Dokumenten enthalten ist. Es gibt jedoch einige Formen dokumentübergreifender Beziehungen, die behandelt werden können. Weitere Informationen finden Sie im Artikel zur eingeschränkten Include-Unterstützung für Azure Cosmos DB.

Warnung

Das Azure Cosmos DB SDK, das der EF-Anbieter verwendet, unterstützt keine synchrone E/A. Daher verwenden synchrone EF-APIs wie z. B. ToList oder SaveChanges in Version 9.0 und höher immer asynchrone Methoden bei Verwendung von EF auslösen. Frühere Versionen von EF unterstützten die synchronen APIs, indem sie die .Wait() zurückgegebenen APIs aufriefenTask. Dies wird als „sync over async“ bezeichnet und ist eine höchst ratsame Technik, die zu Deadlocks führen kann. Weitere Informationen finden Sie in der Änderungsnotiz zu EF 9.0.

Über die Unterschiede in relationalen und Dokumentdatenbanken und Einschränkungen im SDK hinaus umfasst der EF Core-Anbieter für Azure Cosmos DB NoSQL nicht alles, was mit der Kombination von EF Core und dem Azure Cosmos DB SDK implementiert werden kann. Mögliche Verbesserungen in diesem Bereich werden von Problemen im EF Core GitHub-Repository nachverfolgt, das mit der Bezeichnung area-cosmos Die beste Möglichkeit, die Wichtigkeit eines Problems anzugeben, besteht darin, dafür zu stimmen () gekennzeichnet ist.. Diese Daten werden dann in den Planungsprozess für das nächste Release aufgenommen.