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); }