public static void OnReferenceRelationshipAdded(ReferenceRelationship referenceRelationship)
        {
            #region Check Paramaters
            if (referenceRelationship.Source == null)
            {
                throw new ArgumentNullException("referenceRelationship.Source");
            }

            if (referenceRelationship.Target == null)
            {
                throw new ArgumentNullException("referenceRelationship.Target");
            }

            if (!(referenceRelationship.Source.RolePlayer is DomainClass))
            {
                throw new ArgumentNullException("referenceRelationship.Source.RolePlayer needs to be DomainClass");
            }

            if (!(referenceRelationship.Target.RolePlayer is DomainClass) && !(referenceRelationship.Target.RolePlayer is ReferenceRelationship))
            {
                throw new ArgumentNullException("referenceRelationship.Target.RolePlayer needs to be DomainClass or ReferenceRelationship");
            }
            #endregion

            // Add properties and id attribute and set serialization form.
            SerializedReferenceRelationship child = new SerializedReferenceRelationship(referenceRelationship.Store);
            child.ReferenceRelationship = referenceRelationship;
            if (referenceRelationship.NeedsFullSerialization())
            {
                child.IsInFullSerialization = true;
            }
            else
            {
                child.IsInFullSerialization = false;
            }
            child.SerializationName = referenceRelationship.SerializationName;
            SerializationHelper.AddSerializationDomainProperties(referenceRelationship.Store, referenceRelationship);

            referenceRelationship.ModelContext.SerializationModel.Children.Add(child);

            SerializationClass domainClassSource = (referenceRelationship.Source.RolePlayer as DomainClass).SerializedDomainClass;
            domainClassSource.Children.Add(child);

            // Add roles players.
            SerializedDomainRole roleSource = new SerializedDomainRole(referenceRelationship.Store);
            roleSource.DomainRole = referenceRelationship.Source;
            roleSource.SerializationAttributeName = referenceRelationship.SerializationAttributeName;
            roleSource.SerializationName          = referenceRelationship.SerializationSourceName;
            child.Children.Add(roleSource);

            SerializedDomainRole roleTarget = new SerializedDomainRole(referenceRelationship.Store);
            roleTarget.DomainRole = referenceRelationship.Target;
            roleTarget.SerializationAttributeName = referenceRelationship.SerializationAttributeName;
            roleTarget.SerializationName          = referenceRelationship.SerializationTargetName;
            child.Children.Add(roleTarget);

            child.SerializedDomainRoles.Add(roleSource);
            child.SerializedDomainRoles.Add(roleTarget);

            // update derived roles
            SerializationHelper.UpdateDerivedElementsSerializationDomainRoles(referenceRelationship.Source.RolePlayer);
        }