internal void RemoveRole(DynamicObject association, IDynamicRoleType roleType, DynamicObject role) { IDynamicAssociationType associationType = roleType.AssociationType; this.GetAssociation(role, associationType, out object previousAssociation); this.GetRole(association, roleType, out object previousRole); if (previousRole != null) { // Role var changedRoleByAssociation = this.ChangedRoleByAssociation(roleType); changedRoleByAssociation[association] = NullableArraySet.Remove(previousRole, role); // Association var changedAssociationByRole = this.ChangedAssociationByRole(associationType); if (associationType.IsOne) { // One to Many changedAssociationByRole[role] = null; } else { // Many to Many changedAssociationByRole[role] = NullableArraySet.Add(previousAssociation, association); } } }
internal void AddRole(DynamicObject association, IDynamicRoleType roleType, DynamicObject role) { IDynamicAssociationType associationType = roleType.AssociationType; this.GetAssociation(role, associationType, out object previousAssociation); // Role var changedRoleByAssociation = this.ChangedRoleByAssociation(roleType); this.GetRole(association, roleType, out object previousRole); DynamicObject[] roleArray = (DynamicObject[])previousRole; roleArray = NullableArraySet.Add(roleArray, role); changedRoleByAssociation[association] = roleArray; // Association var changedAssociationByRole = this.ChangedAssociationByRole(associationType); if (associationType.IsOne) { // One to Many DynamicObject previousAssociationObject = (DynamicObject)previousAssociation; if (previousAssociationObject != null) { this.GetRole(previousAssociationObject, roleType, out object previousAssociationRole); changedRoleByAssociation[previousAssociationObject] = NullableArraySet.Remove(previousAssociationRole, role); } changedAssociationByRole[role] = association; } else { // Many to Many changedAssociationByRole[role] = NullableArraySet.Add(previousAssociation, association); } }
private void AddAssociationType(IDynamicAssociationType associationType) { this.CheckNames(associationType.SingularName, associationType.PluralName); this.assignedAssociationTypeByName.Add(associationType.SingularName, associationType); this.assignedAssociationTypeByName.Add(associationType.PluralName, associationType); }
private Dictionary <DynamicObject, object> ChangedAssociationByRole(IDynamicAssociationType associationType) { if (!this.changedAssociationByRoleByAssociationType.TryGetValue(associationType, out Dictionary <DynamicObject, object> changedAssociationByRole)) { changedAssociationByRole = new Dictionary <DynamicObject, object>(); this.changedAssociationByRoleByAssociationType[associationType] = changedAssociationByRole; } return(changedAssociationByRole); }
private Dictionary <DynamicObject, object> AssociationByRole(IDynamicAssociationType asscociationType) { if (!this.associationByRoleByAssociationType.TryGetValue(asscociationType, out Dictionary <DynamicObject, object> associationByRole)) { associationByRole = new Dictionary <DynamicObject, object>(); this.associationByRoleByAssociationType[asscociationType] = associationByRole; } return(associationByRole); }
internal void GetAssociation(DynamicObject role, IDynamicAssociationType associationType, out object association) { if (this.changedAssociationByRoleByAssociationType.TryGetValue(associationType, out var changedAssociationByRole) && changedAssociationByRole.TryGetValue(role, out association)) { return; } this.AssociationByRole(associationType).TryGetValue(role, out association); }
private bool TryGetAssociation(IDynamicAssociationType associationType, out object result) { result = this.Population.GetAssociation(this, associationType); if (result == null && associationType.IsMany) { result = associationType.ObjectType.EmptyArray; } return(true); }
public object GetAssociation(DynamicObject obj, IDynamicAssociationType associationType) { this.database.GetAssociation(obj, associationType, out var result); return(result); }