public void SetCompositeRoles(IRelationType relationType, Extent roles) { if (roles == null || roles.Count == 0) { this.RemoveCompositeRoles(relationType); return; } this.AssertNotDeleted(); var roleObjectIds = new List <long>(); foreach (IObject role in roles) { if (role != null) { RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, role); roleObjectIds.Add(role.Id); } } switch (relationType.Multiplicity) { case Multiplicity.OneToMany: this.session.SetCompositeRoleOneToMany(this.objectId, relationType.RoleType, roleObjectIds.ToArray()); return; case Multiplicity.ManyToMany: this.session.SetCompositeRoleManyToMany(this.objectId, relationType.RoleType, roleObjectIds.ToArray()); return; default: throw new Exception("Unsupported multiplicity " + relationType.Multiplicity); } }
public virtual void RemoveCompositeRole(IRelationType relationType, IObject roleObject) { this.AssertExist(); if (roleObject != null) { RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, roleObject); var role = (Strategy)roleObject.Strategy; this.Roles.RemoveCompositeRole(relationType.RoleType, role); } }
public void RemoveCompositeRoles(IRelationType relationType) { this.AssertNotDeleted(); RoleAssertions.CompositeRolesChecks(this, relationType.RoleType); switch (relationType.Multiplicity) { case Multiplicity.OneToMany: this.session.RemoveCompositeRolesOneToMany(this.objectId, relationType.RoleType); return; case Multiplicity.ManyToMany: this.session.RemoveCompositeRolesManyToMany(this.objectId, relationType.RoleType); return; default: throw new Exception("Unsupported multiplicity " + relationType.Multiplicity); } }
public virtual void SetCompositeRoles(IRelationType relationType, Allors.Extent roleObjects) { if (roleObjects == null || roleObjects.Count == 0) { this.RemoveCompositeRoles(relationType); } else { this.AssertExist(); var roleType = relationType.RoleType; // TODO: use CompositeRoles var previousRoles = new List <long>(this.Roles.GetCompositeRoles(roleType)); var newRoles = new HashSet <long>(); foreach (IObject roleObject in roleObjects) { if (roleObject != null) { RoleAssertions.CompositeRolesChecks(this, roleType, roleObject); var role = (Strategy)roleObject.Strategy; if (!previousRoles.Contains(role.ObjectId)) { this.Roles.AddCompositeRole(roleType, role); } newRoles.Add(role.ObjectId); } } foreach (var previousRole in previousRoles) { if (!newRoles.Contains(previousRole)) { this.Roles.RemoveCompositeRole(roleType, this.SqlSession.GetOrCreateAssociationForExistingObject(previousRole).Strategy); } } } }
public void AddCompositeRole(IRelationType relationType, IObject role) { if (role == null) { return; } this.AssertNotDeleted(); RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, role); switch (relationType.Multiplicity) { case Multiplicity.OneToMany: this.session.AddCompositeRoleOneToMany(this.objectId, relationType.RoleType, role.Id); return; case Multiplicity.ManyToMany: this.session.AddCompositeRoleManyToMany(this.objectId, relationType.RoleType, role.Id); return; default: throw new Exception("Unsupported multiplicity " + relationType.Multiplicity); } }