コード例 #1
0
        public void RemoveCompositeRole(IRoleType roleType, Strategy role)
        {
            CompositeRoles compositeRoles;

            if (this.ModifiedRolesByRoleType == null || !this.ModifiedRolesByRoleType.TryGetValue(roleType, out compositeRoles))
            {
                compositeRoles = new CompositeRoles(this.GetCompositeRoles(roleType));
                this.ModifiedRolesByRoleType[roleType] = compositeRoles;
            }

            if (compositeRoles.Contains(role.ObjectId))
            {
                this.Reference.Session.SqlChangeSet.OnChangingCompositesRole(this.Reference.ObjectId, roleType, role);

                compositeRoles.Remove(role.ObjectId);

                if (roleType.AssociationType.IsOne)
                {
                    this.Reference.Session.SetAssociation(null, role, roleType.AssociationType);
                }
                else
                {
                    this.Reference.Session.RemoveAssociation(this.Reference, role.Reference, roleType.AssociationType);
                    this.Reference.Session.TriggerFlush(role.ObjectId, roleType.AssociationType);
                }

                this.AddRequiresFlushRoleType(roleType);
                this.Reference.Session.RequireFlush(this.Reference, this);
            }
        }
コード例 #2
0
        public void AddCompositeRole(IRoleType roleType, Strategy role)
        {
            CompositeRoles compositeRoles;

            if (this.ModifiedRolesByRoleType == null || !this.ModifiedRolesByRoleType.TryGetValue(roleType, out compositeRoles))
            {
                compositeRoles = new CompositeRoles(this.GetCompositeRoles(roleType));
                this.ModifiedRolesByRoleType[roleType] = compositeRoles;
            }

            this.Reference.Session.SqlChangeSet.OnChangingCompositesRole(this.Reference.ObjectId, roleType, role);

            if (!compositeRoles.Contains(role.ObjectId))
            {
                compositeRoles.Add(role.ObjectId);

                if (roleType.AssociationType.IsOne)
                {
                    var previousAssociationObject = role.GetCompositeAssociation(roleType.RelationType);
                    var previousAssociation       = previousAssociationObject != null ? (Strategy)previousAssociationObject.Strategy : null;
                    if (previousAssociation != null && !previousAssociation.ObjectId.Equals(this.Reference.ObjectId))
                    {
                        this.Reference.Session.SqlChangeSet.OnChangingCompositesRole(previousAssociation.ObjectId, roleType, null);

                        previousAssociation.RemoveCompositeRole(roleType.RelationType, role.GetObject());
                    }

                    this.Reference.Session.SetAssociation(this.Reference, role, roleType.AssociationType);
                }
                else
                {
                    this.Reference.Session.AddAssociation(this.Reference, role.Reference, roleType.AssociationType);
                    this.Reference.Session.TriggerFlush(role.ObjectId, roleType.AssociationType);
                }

                this.AddRequiresFlushRoleType(roleType);
                this.Reference.Session.RequireFlush(this.Reference, this);
            }
        }