private static void PrepareSourceTree(Source currentSource, ref ClassDef currentClassDef) { while (currentSource != null) { Source childSource = currentSource.ChildSource; currentSource.EntityName = currentClassDef.GetTableName(); if (childSource != null) { string relationshipName = childSource.Name; IRelationshipDef relationshipDef = currentClassDef.GetRelationship(relationshipName); if (relationshipDef == null) { string message = string.Format("'{0}' does not have a relationship called '{1}'.", currentClassDef.ClassName, relationshipName); throw new RelationshipNotFoundException(message); } foreach (RelPropDef relPropDef in relationshipDef.RelKeyDef) { string ownerFieldName = currentClassDef.GetPropDef(relPropDef.OwnerPropertyName).DatabaseFieldName; string relatedFieldName = relationshipDef.RelatedObjectClassDef.GetPropDef(relPropDef.RelatedClassPropName).DatabaseFieldName; QueryField fromField = new QueryField(relPropDef.OwnerPropertyName, ownerFieldName, currentSource); QueryField toField = new QueryField(relPropDef.RelatedClassPropName, relatedFieldName, childSource); currentSource.Joins[0].JoinFields.Add(new Source.Join.JoinField(fromField, toField)); } currentClassDef = (ClassDef)relationshipDef.RelatedObjectClassDef; } currentSource = childSource; } }
/// <summary> /// Creates a panel with a grid containing the business object /// information /// </summary> /// <param name="formGrid">The grid to fill</param> /// <returns>Returns the object containing the panel</returns> private PanelFactoryInfo CreatePanelWithGrid(IUIFormGrid formGrid) { IEditableGridControl myGrid = _controlFactory.CreateEditableGridControl(); BusinessObject bo = _currentBusinessObject; ClassDef classDef = bo.ClassDef; DataSetProvider dataSetProvider = myGrid.Grid.DataSetProvider as DataSetProvider; if (dataSetProvider != null) { dataSetProvider.ObjectInitialiser = new RelationshipObjectInitialiser(bo, (RelationshipDef)classDef.GetRelationship(formGrid.RelationshipName), formGrid.CorrespondingRelationshipName); } IBusinessObjectCollection collection = bo.Relationships.GetRelatedCollection(formGrid.RelationshipName); myGrid.SetBusinessObjectCollection(collection); myGrid.Dock = DockStyle.Fill; IPanel panel = _controlFactory.CreatePanel(formGrid.RelationshipName, _controlFactory); panel.Controls.Add(myGrid); PanelFactoryInfo panelFactoryInfo = new PanelFactoryInfo(panel); panelFactoryInfo.FormGrids.Add(formGrid.RelationshipName, myGrid); return(panelFactoryInfo); }
private static void PrepareSourceTree(Source currentSource, ref ClassDef currentClassDef) { while (currentSource != null) { Source childSource = currentSource.ChildSource; currentSource.EntityName = currentClassDef.GetTableName(); if (childSource != null) { string relationshipName = childSource.Name; IRelationshipDef relationshipDef = currentClassDef.GetRelationship(relationshipName); if (relationshipDef == null) { string message = string.Format("'{0}' does not have a relationship called '{1}'.", currentClassDef.ClassName, relationshipName); throw new RelationshipNotFoundException(message); } foreach (RelPropDef relPropDef in relationshipDef.RelKeyDef) { string ownerFieldName = currentClassDef.GetPropDef(relPropDef.OwnerPropertyName).DatabaseFieldName; string relatedFieldName = relationshipDef.RelatedObjectClassDef.GetPropDef(relPropDef.RelatedClassPropName).DatabaseFieldName; QueryField fromField = new QueryField(relPropDef.OwnerPropertyName, ownerFieldName, currentSource); QueryField toField = new QueryField(relPropDef.RelatedClassPropName, relatedFieldName, childSource); currentSource.Joins[0].JoinFields.Add(new Source.Join.JoinField(fromField, toField)); } currentClassDef = (ClassDef) relationshipDef.RelatedObjectClassDef; } currentSource = childSource; } }
public void TestGetRelationship() { ClassDef parentClassDef = new ClassDef(typeof(String), null, null, null, new RelationshipDefCol()); Assert.IsNull(parentClassDef.GetRelationship("wrongrel")); ClassDef childClassDef = new ClassDef(typeof(String), null, null, null, new RelationshipDefCol()); childClassDef.SuperClassDef = new SuperClassDef(parentClassDef, ORMapping.ClassTableInheritance); Assert.IsNull(parentClassDef.GetRelationship("wrongrel")); PropDef propDef = new PropDef("prop", typeof(String), PropReadWriteRule.ReadWrite, null); RelPropDef relPropDef = new RelPropDef(propDef, "relProp"); RelKeyDef relKeyDef = new RelKeyDef(); relKeyDef.Add(relPropDef); RelationshipDef relDef = new SingleRelationshipDef("rel", typeof(MyRelatedBo), relKeyDef, true, DeleteParentAction.Prevent); childClassDef.RelationshipDefCol.Add(relDef); Assert.AreEqual(relDef, childClassDef.GetRelationship("rel")); childClassDef.RelationshipDefCol = new RelationshipDefCol(); parentClassDef.RelationshipDefCol.Add(relDef); Assert.AreEqual(relDef, childClassDef.GetRelationship("rel")); }