private void AddRelationship(OrmRelationship relationship) { lock (Relationships) { this.Relationships.Add(new Relationship(relationship)); } }
public RelationshipInfo(OrmEntity parentEntity, OrmEntity childEntity, bool isInverted) { _relationship = null; _isOneToMany = false; _propertyName = (isInverted ? parentEntity : childEntity).Name; }
public RelationshipInfo(OrmRelationship relationship, bool isInverted) { _relationship = relationship; _isOneToMany = ((relationship.Cardinality == OrmRelationship.OneToMany) != isInverted); _propertyName = (isInverted ? relationship.ChildProperty : relationship.ParentProperty).PropertyName; }
public Relationship(OrmRelationship sageRel) { RelationshipName = sageRel.ToString(); if (sageRel.Cardinality == "M:1") { _parentTable = sageRel.ParentEntity.TableName; _parentField = sageRel.Columns[0].ParentProperty.ColumnName; _childTable = sageRel.ChildEntity.TableName; _childField = sageRel.Columns[0].ChildProperty.ColumnName; } else { _childTable = sageRel.ParentEntity.TableName; _childField = sageRel.Columns[0].ParentProperty.ColumnName; _parentTable = sageRel.ChildEntity.TableName; _parentField = sageRel.Columns[0].ChildProperty.ColumnName; } }
private RelationshipInfo CreateRelationship(DataPathJoin join, OrmEntity leftEntity, OrmEntity rightEntity, bool isRightPK) { string targetField = join.FromField; if (targetField.StartsWith("@")) { targetField = targetField.Substring(1); } OrmFieldProperty leftProperty = leftEntity.Properties.GetFieldPropertyByFieldName(targetField); if (leftProperty == null) { LogError(leftEntity, "Property based on field '{0}' not found on entity based on table '{1}'", join.FromField, leftEntity.TableName); return null; } targetField = join.ToField; if (targetField.StartsWith("@")) { targetField = targetField.Substring(1); } OrmFieldProperty rightProperty = rightEntity.Properties.GetFieldPropertyByFieldName(targetField); if (rightProperty == null) { LogError(rightEntity, "Property based on field '{0}' not found on entity based on table '{1}'", join.ToField, rightEntity.TableName); return null; } OrmRelationship ormRelationship = CollectionUtils.Find( _ormModel.Relationships, delegate(OrmRelationship item) { if (item.Columns.Count > 0) { OrmRelationshipColumn column = item.Columns[0]; return ((item.ParentEntity == leftEntity && item.ChildEntity == rightEntity && column.ParentProperty == leftProperty && column.ChildProperty == rightProperty && (item.Cardinality == OrmRelationship.ManyToOne) == isRightPK && item.ParentProperty.Include) || (item.ParentEntity == rightEntity && item.ChildEntity == leftEntity && column.ParentProperty == rightProperty && column.ChildProperty == leftProperty && (item.Cardinality == OrmRelationship.OneToMany) == isRightPK && item.ChildProperty.Include)); } return false; }); bool isInverted; if (ormRelationship == null) { bool isLeftDynamic = leftEntity.Package.GetGenerateAssembly(); if (!isLeftDynamic) { LogError("Cannot create the necessary relationship property for '{0}' join", join); return null; } string cardinality; string parentPropertyName; if (isRightPK) { cardinality = OrmRelationship.ManyToOne; parentPropertyName = GenerateReferencePropertyName(rightEntity, leftEntity, leftProperty); } else { cardinality = OrmRelationship.OneToMany; parentPropertyName = GenerateCollectionPropertyName(leftEntity, rightEntity); } ormRelationship = new OrmRelationship( leftEntity, rightEntity, cardinality, leftProperty, rightProperty, CascadeOption.SaveUpdate); ormRelationship.ParentProperty.PropertyName = parentPropertyName; leftEntity.ChildEntities.Add(ormRelationship); rightEntity.ParentEntities.Add(ormRelationship); ormRelationship.ChildProperty.Include = false; isInverted = false; } else { isInverted = (ormRelationship.ParentEntity == rightEntity); } return new RelationshipInfo(ormRelationship, isInverted); }