Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tabellenbeziehungen in Microsoft Dataverse definieren, wie Tabellenzeilen Zeilen aus anderen Tabellen oder derselben Tabelle zugeordnet werden können. Es gibt zwei Arten von Tabellenbeziehungen: 1:n und n:n. Sie können Beziehungen zwischen Tabellen erstellen, indem Sie die Beziehungs-APIs verwenden, wie im folgenden Abschnitt gezeigt.
Weitere Informationen: Microsoft Dataverse Tabellenbeziehungen
from PowerPlatform.Dataverse.models import (
CascadeConfiguration,
Label,
LocalizedLabel,
LookupAttributeMetadata,
ManyToManyRelationshipMetadata,
OneToManyRelationshipMetadata,
)
# Create a one-to-many relationship: Department (1) -> Employee (N)
# This adds a "Department" lookup field to the Employee table
lookup = LookupAttributeMetadata(
schema_name="new_DepartmentId",
display_name=Label(localized_labels=[LocalizedLabel(label="Department", language_code=1033)]),
)
relationship = OneToManyRelationshipMetadata(
schema_name="new_Department_Employee",
referenced_entity="new_department", # Parent table (the "one" side)
referencing_entity="new_employee", # Child table (the "many" side)
referenced_attribute="new_departmentid",
)
result = client.tables.create_one_to_many_relationship(lookup, relationship)
print(f"Created lookup field: {result.lookup_schema_name}")
# Create a many-to-many relationship: Employee (N) <-> Project (N)
# Employees work on multiple projects; projects have multiple team members
m2m_relationship = ManyToManyRelationshipMetadata(
schema_name="new_employee_project",
entity1_logical_name="new_employee",
entity2_logical_name="new_project",
)
result = client.tables.create_many_to_many_relationship(m2m_relationship)
print(f"Created M:N relationship: {result.relationship_schema_name}")
# Query relationship metadata
rel = client.tables.get_relationship("new_Department_Employee")
if rel:
print(f"Found: {rel.relationship_schema_name}")
# List all relationships
rels = client.tables.list_relationships()
for rel in rels:
print(f"{rel['SchemaName']} ({rel.get('RelationshipType')})")
# List relationships for a specific table (one-to-many + many-to-one + many-to-many)
account_rels = client.tables.list_table_relationships("account")
for rel in account_rels:
print(f"{rel['SchemaName']} -> {rel.get('RelationshipType')}")
# Delete a relationship
client.tables.delete_relationship(result.relationship_id)
Verwenden Sie für einfachere Szenarien die Komfortmethode.
# Quick way to create a lookup field with sensible defaults
result = client.tables.create_lookup_field(
referencing_table="contact", # Child table gets the lookup field
lookup_field_name="new_AccountId",
referenced_table="account", # Parent table being referenced
display_name="Account",
)
Ein vollständiges Arbeitsbeispiel finden Sie unter Beispiele/erweitert/relationships.py.
Konfigurieren des Kaskadenverhaltens
CascadeConfiguration steuert, was mit untergeordneten Datensätzen geschieht, wenn Sie eine Aktion für den übergeordneten Datensatz in einer 1:n-Beziehung ausführen. Die folgenden Werte sind für jede Cascade-Eigenschaft gültig (assign, , , reparentmerge, , ). unsharesharedelete
| Wert | Behavior |
|---|---|
"Cascade" |
Führen Sie die Aktion für alle zugehörigen untergeordneten Datensätze aus. |
"NoCascade" |
Wenden Sie die Aktion nicht auf untergeordnete Datensätze an. |
"RemoveLink" |
Entfernen Sie den Wert des Lookup-Felds in allen untergeordneten Datensätzen, wenn der übergeordnete Datensatz gelöscht wird. |
"Restrict" |
Verhindern, dass der übergeordnete Datensatz gelöscht wird, wenn untergeordnete Datensätze vorhanden sind. |
Standardmäßig ist delete"RemoveLink" und alle anderen Eigenschaften sind "NoCascade". Sie können die Konstanten importieren, um die Zeichenfolgenwerte direkt zu verwenden.
from PowerPlatform.Dataverse.common.constants import (
CASCADE_BEHAVIOR_CASCADE,
CASCADE_BEHAVIOR_NO_CASCADE,
CASCADE_BEHAVIOR_REMOVE_LINK,
CASCADE_BEHAVIOR_RESTRICT,
)
relationship = OneToManyRelationshipMetadata(
schema_name="new_Department_Employee",
referenced_entity="new_department",
referencing_entity="new_employee",
referenced_attribute="new_departmentid",
cascade_configuration=CascadeConfiguration(delete=CASCADE_BEHAVIOR_REMOVE_LINK),
)
RelationshipInfo-Rückgabeobjekt
Die Methoden für die Beziehungserstellung geben ein RelationshipInfo Objekt mit den folgenden Feldern zurück.
| Feld | Description |
|---|---|
relationship_id |
GUID der Beziehungsmetadaten. Übergeben Sie diesen Wert an delete_relationship. |
relationship_schema_name |
Schemasname der Beziehung. |
relationship_type |
"one_to_many" oder "many_to_many". |
lookup_schema_name |
Schemaname des Nachschlagefelds, das in der untergeordneten Tabelle erstellt wurde (nur bei 1:n-Beziehungen). |
referenced_entity / referencing_entity |
Logische Namen der übergeordneten und untergeordneten Tabellen (1:n). |
entity1_logical_name / entity2_logical_name |
Die beiden logischen Tabellennamen (Viele-zu-viele). |
Note
Wenn Sie für eine n:n-Beziehung kein intersect_entity_name angeben, verwendet die Zwischentabelle den schema_name der Beziehung als Namen.
create_lookup_field-Optionen
Die create_lookup_field Komfortmethode akzeptiert die folgenden optionalen Parameter.
| Parameter | Vorgabe | Description |
|---|---|---|
display_name |
Name der referenzierten Tabelle | Anzeigename, der für das Lookup-Feld angezeigt wird. |
description |
None |
Optionale Beschreibung für das Nachschlagefeld. |
required |
False |
Gibt an, ob das Nachschlagefeld erforderlich ist. |
cascade_delete |
"RemoveLink" |
Kaskadenlöschverhalten: "RemoveLink", "Cascade", oder "Restrict". |
language_code |
1033 |
Sprachcode (LCID) für generierte Bezeichnungen. |
solution |
None |
Eindeutiger Name der Lösung, mit der die Beziehung verknüpft wird. |
result = client.tables.create_lookup_field(
referencing_table="new_order",
lookup_field_name="new_AccountId",
referenced_table="account",
display_name="Account",
required=True,
cascade_delete="RemoveLink",
)
Important
Beim Löschen einer Eins-zu-viele-Beziehung wird auch das zugeordnete Lookup-Feld aus der untergeordneten Tabelle entfernt. Dieser Vorgang kann nicht rückgängig gemacht werden. Sie müssen Beziehungen löschen, bevor Sie die Tabellen löschen können, die sie verbinden.
list_table_relationships löst ein MetadataError aus, wenn die angegebene Tabelle nicht vorhanden ist.