public void Test5(Store store) { myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "FullyAbsorbed"); myTestServices.LogMessage("Separate a one-to-main objectification"); ORMModel model = store.ElementDirectory.FindElements <ORMModel>()[0]; ObjectType birthObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Birth").FirstElement; FactType factTypeToSeparate = birthObjectType.PreferredIdentifier.RoleCollection[0].Proxy.FactType; MappingCustomizationModel customizationModel; using (Transaction t = store.TransactionManager.BeginTransaction("Separate assimilated objectification")) { customizationModel = new MappingCustomizationModel(store); AssimilationMapping mapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate)); new AssimilationMappingCustomizesFactType(mapping, factTypeToSeparate); mapping.Model = customizationModel; t.Commit(); } myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateObjectification"); myTestServices.LogMessage("Add a longer assimilation chain with a separate end point"); ObjectType partyObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Party").FirstElement; AssimilationMapping partyIsThingAssimilationMapping; using (Transaction t = store.TransactionManager.BeginTransaction("Longer assimilation chain")) { partyObjectType.ReferenceModeDisplay = ""; // Using ReferenceModeDisplay instead of ReferenceModeString to automatically kill Party_id ObjectType thingObjectType = new ObjectType(store, new PropertyAssignment(ObjectType.NameDomainPropertyId, "Thing"), new PropertyAssignment(ObjectType.IsIndependentDomainPropertyId, true)); thingObjectType.Model = model; thingObjectType.ReferenceModeString = "id"; SubtypeFact partyIsThingSubtypeFact = SubtypeFact.Create(partyObjectType, thingObjectType); partyIsThingAssimilationMapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate)); new AssimilationMappingCustomizesFactType(partyIsThingAssimilationMapping, partyIsThingSubtypeFact); partyIsThingAssimilationMapping.Model = customizationModel; t.Commit(); } myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateRemoteSupertype"); myTestServices.LogMessage("Remove the remote separation"); using (Transaction t = store.TransactionManager.BeginTransaction("")) { partyIsThingAssimilationMapping.AbsorptionChoice = AssimilationAbsorptionChoice.Absorb; t.Commit(); } }
/// <summary> /// Constructor /// Creates a AssimilationMappingCustomizesFactType link in the same Partition as the given AssimilationMapping /// </summary> /// <param name="source">AssimilationMapping to use as the source of the relationship.</param> /// <param name="target">FactType to use as the target of the relationship.</param> public AssimilationMappingCustomizesFactType(AssimilationMapping source, global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType target) : base((source != null ? source.Partition : null), new DslModeling::RoleAssignment[]{new DslModeling::RoleAssignment(AssimilationMappingCustomizesFactType.AssimilationMappingDomainRoleId, source), new DslModeling::RoleAssignment(AssimilationMappingCustomizesFactType.FactTypeDomainRoleId, target)}, null) { }
public static void SetModel(AssimilationMapping element, MappingCustomizationModel newModel) { DslModeling::DomainRoleInfo.SetLinkedElement(element, AssimilationMappingDomainRoleId, newModel); }
public static MappingCustomizationModel GetModel(AssimilationMapping element) { return DslModeling::DomainRoleInfo.GetLinkedElement(element, AssimilationMappingDomainRoleId) as MappingCustomizationModel; }
/// <summary> /// Constructor /// Creates a MappingCustomizationModelHasAssimilationMapping link in the same Partition as the given MappingCustomizationModel /// </summary> /// <param name="source">MappingCustomizationModel to use as the source of the relationship.</param> /// <param name="target">AssimilationMapping to use as the target of the relationship.</param> public MappingCustomizationModelHasAssimilationMapping(MappingCustomizationModel source, AssimilationMapping target) : base((source != null ? source.Partition : null), new DslModeling::RoleAssignment[]{new DslModeling::RoleAssignment(MappingCustomizationModelHasAssimilationMapping.ModelDomainRoleId, source), new DslModeling::RoleAssignment(MappingCustomizationModelHasAssimilationMapping.AssimilationMappingDomainRoleId, target)}, null) { }
public static void SetFactType(AssimilationMapping element, global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType newFactType) { DslModeling::DomainRoleInfo.SetLinkedElement(element, AssimilationMappingDomainRoleId, newFactType); }
public static global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType GetFactType(AssimilationMapping element) { return DslModeling::DomainRoleInfo.GetLinkedElement(element, AssimilationMappingDomainRoleId) as global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType; }
public static void SetAssimilationMapping(global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType element, AssimilationMapping newAssimilationMapping) { DslModeling::DomainRoleInfo.SetLinkedElement(element, FactTypeDomainRoleId, newAssimilationMapping); }
/// <summary> /// Get a minimal unique identifier for a column based on mapped roles. The identifer /// will stop as soon as the fact type is used in a single column or in a partitioned /// or separated column. /// </summary> /// <param name="column">The <see cref="Column"/> to analyze</param> /// <param name="idList">Scratch list used to determine keys</param> /// <param name="minKeySize">The minimum number of ids that uniquely /// identify this column. The actually key may be longer than this /// minimimum for partitioned and separated tables. Key comparisons /// may be performed down to this minimum size.</param> /// <returns><see langword="true"/> if the key was available.</returns> private static bool BuildKey(Column column, List <Guid> idList, out int minKeySize) { idList.Clear(); int uniqueUseIndex = -1; minKeySize = 0; LinkedElementCollection <ConceptTypeChild> childNodes = ColumnHasConceptTypeChild.GetConceptTypeChildPath(column); for (int i = childNodes.Count - 1; i >= 0; --i) { ConceptTypeChild child = childNodes[i]; bool uniqueChild = ColumnHasConceptTypeChild.GetLinksToColumn(child).Count == 1; LinkedElementCollection <FactType> pathFactTypes = ConceptTypeChildHasPathFactType.GetPathFactTypeCollection(child); int factTypeCount = pathFactTypes.Count; InformationType infoType; ObjectType objectType; if (0 != (factTypeCount = pathFactTypes.Count)) { for (int j = factTypeCount - 1; j >= 0; --j) { FactType factType = pathFactTypes[j]; idList.Add(FactTypeMapsTowardsRole.GetTowardsRole(factType).Id); if (-1 == uniqueUseIndex && uniqueChild && ConceptTypeChildHasPathFactType.GetLinksToConceptTypeChild(factType).Count == 1) { minKeySize = idList.Count; uniqueUseIndex = minKeySize - 1; } } ConceptTypeAssimilatesConceptType assimilation; if (uniqueUseIndex != -1 && null != (assimilation = child as ConceptTypeAssimilatesConceptType) && AssimilationMapping.GetAbsorptionChoiceFromAssimilation(assimilation) != AssimilationAbsorptionChoice.Absorb) { uniqueUseIndex = idList.Count - 1; } } else if (null != (infoType = child as InformationType) && null != (objectType = ConceptTypeIsForObjectType.GetObjectType(infoType.ConceptType))) { // Happens for a value column in an object type table, which has one concept type child idList.Add(objectType.Id); } } int count = idList.Count; if (0 == count) { return(false); } if (uniqueUseIndex != -1 && (uniqueUseIndex + 1) < count) { idList.RemoveRange(uniqueUseIndex + 1, count - uniqueUseIndex - 1); } if (minKeySize == 0) { minKeySize = idList.Count; } return(true); }
public void Test5(Store store) { myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "FullyAbsorbed"); myTestServices.LogMessage("Separate a one-to-main objectification"); ORMModel model = store.ElementDirectory.FindElements<ORMModel>()[0]; ObjectType birthObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Birth").FirstElement; FactType factTypeToSeparate = birthObjectType.PreferredIdentifier.RoleCollection[0].Proxy.FactType; MappingCustomizationModel customizationModel; using (Transaction t = store.TransactionManager.BeginTransaction("Separate assimilated objectification")) { customizationModel = new MappingCustomizationModel(store); AssimilationMapping mapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate)); new AssimilationMappingCustomizesFactType(mapping, factTypeToSeparate); mapping.Model = customizationModel; t.Commit(); } myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateObjectification"); myTestServices.LogMessage("Add a longer assimilation chain with a separate end point"); ObjectType partyObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Party").FirstElement; AssimilationMapping partyIsThingAssimilationMapping; using (Transaction t = store.TransactionManager.BeginTransaction("Longer assimilation chain")) { partyObjectType.ReferenceModeDisplay = ""; // Using ReferenceModeDisplay instead of ReferenceModeString to automatically kill Party_id ObjectType thingObjectType = new ObjectType(store, new PropertyAssignment(ObjectType.NameDomainPropertyId, "Thing"), new PropertyAssignment(ObjectType.IsIndependentDomainPropertyId, true)); thingObjectType.Model = model; thingObjectType.ReferenceModeString = "id"; SubtypeFact partyIsThingSubtypeFact = SubtypeFact.Create(partyObjectType, thingObjectType); partyIsThingAssimilationMapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate)); new AssimilationMappingCustomizesFactType(partyIsThingAssimilationMapping, partyIsThingSubtypeFact); partyIsThingAssimilationMapping.Model = customizationModel; t.Commit(); } myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateRemoteSupertype"); myTestServices.LogMessage("Remove the remote separation"); using (Transaction t = store.TransactionManager.BeginTransaction("")) { partyIsThingAssimilationMapping.AbsorptionChoice = AssimilationAbsorptionChoice.Absorb; t.Commit(); } }