Пример #1
0
 private void AddRelationship(OrmRelationship relationship)
 {
     lock (Relationships)
     {
         this.Relationships.Add(new Relationship(relationship));
     }
 }
Пример #2
0
 public RelationshipInfo(OrmEntity parentEntity, OrmEntity childEntity, bool isInverted)
 {
     _relationship = null;
     _isOneToMany = false;
     _propertyName = (isInverted
                          ? parentEntity
                          : childEntity).Name;
 }
Пример #3
0
 public RelationshipInfo(OrmRelationship relationship, bool isInverted)
 {
     _relationship = relationship;
     _isOneToMany = ((relationship.Cardinality == OrmRelationship.OneToMany) != isInverted);
     _propertyName = (isInverted
                          ? relationship.ChildProperty
                          : relationship.ParentProperty).PropertyName;
 }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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);
        }