private void TestSerializationForOrmAssociationEnd(OrmAssociationEnd originalAttribute) { OrmAssociationEnd clonedAttribute = null; Action cloneAttribute = () => clonedAttribute = originalAttribute.Clone(); cloneAttribute(); Assert.IsTrue(originalAttribute.EqualsTo(clonedAttribute)); Action testClonedNotEquals = () => Assert.IsFalse(originalAttribute.EqualsTo(clonedAttribute)); clonedAttribute.PairTo.SetAsDefault(); testClonedNotEquals(); cloneAttribute(); clonedAttribute.Multiplicity = MultiplicityKind.One; testClonedNotEquals(); cloneAttribute(); clonedAttribute.OnOwnerRemove = AssociationOnRemoveAction.Default; testClonedNotEquals(); cloneAttribute(); clonedAttribute.OnTargetRemove = AssociationOnRemoveAction.Clear; testClonedNotEquals(); }
private static void CustomReadPropertiesFromElements(SerializationContext serializationContext, PersistentTypeHasAssociations element, XmlReader reader) { Action useAssocAttrUpgradeFunc = () => { // this is here when converting from older versions than 1.0.5.0 to set 'UseAssociationAttribute' to true if (ModelUpgrader.Instance.DeserializingModelVersion < ModelUpgrader.Version_1_0_5_0) { ModelUpgrader.Instance.UpdateMakeChangesFlag(); } }; while (!serializationContext.Result.Failed && !reader.EOF && reader.NodeType == XmlNodeType.Element) { switch (reader.LocalName) { case "end1": if (reader.IsEmptyElement) { // No serialized value, must be default one. SerializationUtilities.Skip(reader); // Skip this tag. } else { OrmAssociationEnd end1 = new OrmAssociationEnd(element, "End1"); end1.DeserializeFromXml(reader, "end1"); element.End1 = end1; useAssocAttrUpgradeFunc(); SerializationUtilities.SkipToNextElement(reader); reader.SkipToNextElementFix(); } break; case "end2": if (reader.IsEmptyElement) { // No serialized value, must be default one. SerializationUtilities.Skip(reader); // Skip this tag. } else { OrmAssociationEnd end2 = new OrmAssociationEnd(element, "End2"); end2.DeserializeFromXml(reader, "end2"); element.End2 = end2; useAssocAttrUpgradeFunc(); SerializationUtilities.SkipToNextElement(reader); reader.SkipToNextElementFix(); } break; default: return; // Don't know this element. } } }
private void TestSerializationForOrmAssociationEnd() { const string referentialXml = "<end multiplicity=\"Many\" onOwnerRemove=\"Clear\" onTargetRemove=\"Deny\"><pairTo valueType=\"Custom\"><value>Items</value></pairTo></end>"; OrmAssociationEnd originalAttribute = CreateOrmAssociationEnd(TestAttributeValuesType.Values1); string xml = originalAttribute.SerializeToString(); Assert.IsTrue(Util.StringEqual(xml, referentialXml, true), "Serialized xml form of 'OrmAssociationEnd' type differs from referential xml."); TestSerializationForOrmAssociationEnd(originalAttribute); }
private OrmAssociationEnd CreateOrmAssociationEnd(TestAttributeValuesType valuesType) { OrmAssociationEnd originalAttribute = new OrmAssociationEnd(); bool isValues1 = valuesType == TestAttributeValuesType.Values1; originalAttribute.Multiplicity = isValues1 ? MultiplicityKind.Many : MultiplicityKind.ZeroOrOne; originalAttribute.OnOwnerRemove = isValues1 ? AssociationOnRemoveAction.Clear : AssociationOnRemoveAction.Deny; originalAttribute.OnTargetRemove = isValues1 ? AssociationOnRemoveAction.Deny : AssociationOnRemoveAction.Clear; originalAttribute.PairTo.SetAsCustom(isValues1 ? "Items" : "RevertedItems"); return(originalAttribute); }
public void HandleEvent(ElementEventArgs args) { if (args.EventType == ElementEventType.ElementPropertyChanged) { Func <Tuple <OrmAssociationEnd, OrmAssociationEnd> > getAssocEnd = () => { PersistentType currentOwner = this.PersistentTypeOfNavigationProperty; bool isSource = this.PersistentTypeHasAssociations.SourcePersistentType == currentOwner; OrmAssociationEnd assocEnd1 = isSource ? this.PersistentTypeHasAssociations.End2 : this.PersistentTypeHasAssociations.End1; OrmAssociationEnd assocEnd2 = isSource ? this.PersistentTypeHasAssociations.End1 : this.PersistentTypeHasAssociations.End2; return(new Tuple <OrmAssociationEnd, OrmAssociationEnd>(assocEnd1, assocEnd2)); }; var e = args.ElementPropertyChangedEventArgs; if (e.DomainProperty.Id == MultiplicityDomainPropertyId) { if (this.PersistentTypeHasAssociations != null) { var assocEnds = getAssocEnd(); assocEnds.Item1.Multiplicity = (MultiplicityKind)e.NewValue; } } else if (e.DomainProperty.Id == NameDomainPropertyId) { if (this.PersistentTypeHasAssociations != null) { var assocEnds = getAssocEnd(); assocEnds.Item2.PairTo.SetAsCustom(e.NewValue as string); } } } }
public void HandleEvent(ElementEventArgs args) { if (args.EventType == ElementEventType.CustomEvent) { object customEventArgs = args.CustomEventArgs[0]; OrmAssociationEnd eventFromAssocEnd = customEventArgs as OrmAssociationEnd; string changedProperty = (string)args.CustomEventArgs[1]; string calledFromEndId = (string)args.CustomEventArgs[2]; if (eventFromAssocEnd != null) { bool changeAll = string.IsNullOrEmpty(changedProperty); bool canChangeMultiplicity = changeAll || Util.StringEqual(changedProperty, "Multiplicity", true); bool canChangePairTo = changeAll || Util.StringEqual(changedProperty, "PairTo", true); bool eventFromEnd1 = Util.StringEqual(calledFromEndId, "End1", true); Func <bool, Tuple <NavigationProperty, OrmAssociationEnd> > getDefinitions = delegate(bool revert) { PersistentType persistentToFind = eventFromEnd1 ? (revert ? this.SourcePersistentType : this.TargetPersistentType) : (revert ? this.TargetPersistentType : this.SourcePersistentType); OrmAssociationEnd otherAssocEnd = eventFromEnd1 ? (revert ? this.End2 : eventFromAssocEnd) : (revert ? eventFromAssocEnd : this.End2); NavigationProperty navigationProperty = this.NavigationProperties.SingleOrDefault( navProperty => navProperty.PersistentTypeOfNavigationProperty == persistentToFind); return(new Tuple <NavigationProperty, OrmAssociationEnd>(navigationProperty, otherAssocEnd)); }; { if (canChangeMultiplicity) { bool revert = false; var definitions = getDefinitions(revert); var navigationProperty = definitions.Item1; var otherAssocEnd = definitions.Item2; if (navigationProperty != null) { this.Store.MakeActionWithinTransaction( string.Format("Updating multiplicity on navigation property '{0}' to value '{1}'", navigationProperty.Name, eventFromAssocEnd.Multiplicity), () => { navigationProperty.Multiplicity = otherAssocEnd.Multiplicity; }); } } if (canChangePairTo && !eventFromAssocEnd.PairTo.IsDefault()) { string newName = eventFromAssocEnd.PairTo.Value; bool revert = true; var definitions = getDefinitions(revert); var navigationProperty = definitions.Item1; if (navigationProperty != null) { this.Store.MakeActionWithinTransaction( string.Format("Updating name on navigation property '{0}' to value '{1}'", navigationProperty.Name, newName), () => { navigationProperty.Name = newName; }); } } } } } }