public async Task <int> AddRelation(int providerID, PropertyAssignData data)
        {
            var eventID = await tx.AssignProviderRelation(providerID, data.ID);

            if (Const.DefaultRequired != data.Required)
            {
                await tx.AssignPropertyValueRequirement(eventID, data.ID, data.Required);
            }

            if (Const.DefaultMutability != data.Mutable)
            {
                await tx.AssignPropertyValueMutability(eventID, data.ID, data.Mutable);
            }

            if (Const.DefaultCardinality != data.Cardinality)
            {
                await tx.AssignPropertyValueCardinality(eventID, data.ID, data.Cardinality);
            }

            if (data.Permission.HasValue)
            {
                await tx.AssignPropertyValuePermission(eventID, data.ID, data.Permission.Value);
            }

            return(eventID);
        }
        public async Task <int> AddAttribute(int providerID, PropertyAssignData data)
        {
            var eventID = await tx.AssignProviderAttribute(
                providerID,
                data.ID,
                data.Conditions ?? new ConditionRule.EventConditionRule(providerID)
                );

            if (Const.DefaultRequired != data.Required)
            {
                await tx.AssignPropertyValueRequirement(eventID, data.ID, data.Required);
            }

            if (Const.DefaultMutability != data.Mutable)
            {
                await tx.AssignPropertyValueMutability(eventID, data.ID, data.Mutable);
            }

            if (Const.DefaultCardinality != data.Cardinality)
            {
                await tx.AssignPropertyValueCardinality(eventID, data.ID, data.Cardinality);
            }

            if (data.Permission.HasValue)
            {
                await tx.AssignPropertyValuePermission(eventID, data.ID, data.Permission.Value);
            }

            if (null != data.DefaultValue)
            {
                await tx.AssignPropertyValueSet(eventID, data.ID, data.DefaultValue.PlainValue);
            }

            return(eventID);
        }