public void Add(CslaObjectInfo mainObject)
        {
            if (RelationRulesEngine.IsAllowedEntityObject(mainObject))
            {
                var entity = new AssociativeEntity(GeneratorController.Current.CurrentUnit);
                entity.RelationType      = ObjectRelationType.OneToMultiple;
                entity.ObjectName        = mainObject.ObjectName;
                entity.MainObject        = mainObject.ObjectName;
                entity.MainLazyLoad      = false;
                entity.SecondaryLazyLoad = false;

                var mainCriteriaInfo    = typeof(CslaObjectInfo).GetProperty("CriteriaObjects");
                var mainCriteriaObjects = mainCriteriaInfo.GetValue(mainObject, null);
                foreach (var crit in (CriteriaCollection)mainCriteriaObjects)
                {
                    foreach (var prop in crit.Properties)
                    {
                        entity.MainLoadProperties.Add(CriteriaProperty.Clone(prop));
                    }
                }

                Add(entity);
            }
            else
            {
                throw new Exception(mainObject + " isn't a suitable object for this builder.");
            }
        }
        private List <string> AddCriteriaProperties(CslaObjectInfo info, Criteria crit, CslaObjectInfo myRootInfo, CslaObjectInfo otherRootInfo, bool isGet, bool isManyToMany)
        {
            List <string>        addedProperties      = new List <string>();
            List <ValueProperty> primaryKeyProperties = new List <ValueProperty>();

            // for 1 to N relations use object ValueProperty instead of root's
            if (!isManyToMany)
            {
                myRootInfo = info;
            }

            if (!isGet)
            {
                // retrieve own primary key properties
                foreach (ValueProperty prop in myRootInfo.ValueProperties)
                {
                    if (prop.PrimaryKey != ValueProperty.UserDefinedKeyBehaviour.Default)
                    {
                        primaryKeyProperties.Add(prop);
                    }
                }
            }

            if (isManyToMany || isGet)
            {
                // retrieve related primary key properties
                foreach (ValueProperty prop in otherRootInfo.ValueProperties)
                {
                    if (prop.PrimaryKey != ValueProperty.UserDefinedKeyBehaviour.Default)
                    {
                        primaryKeyProperties.Add(prop);
                    }
                }
            }

            foreach (ValueProperty rootProp in primaryKeyProperties)
            {
                ValueProperty prop = null;
                if (isManyToMany)
                {
                    prop = GetRelatedValueProperty(rootProp);
                }

                if (prop == null)
                {
                    prop = rootProp;
                }

                if (!crit.Properties.Contains(prop.Name))
                {
                    CriteriaProperty p = new CriteriaProperty(prop.Name, prop.PropertyType);
                    p.DbBindColumn = (DbBindColumn)prop.DbBindColumn.Clone();
                    crit.Properties.Add(p);
                    addedProperties.Add(prop.Name);
                }
            }

            return(addedProperties);
        }
Пример #3
0
        internal static CriteriaProperty Clone(CriteriaProperty masterCritProp)
        {
            var newCritProp = new CriteriaProperty();

            newCritProp.DbBindColumn = (DbBindColumn)masterCritProp.DbBindColumn.Clone();
            ((Property)newCritProp).Clone(masterCritProp);
            newCritProp.ParameterValue = masterCritProp.ParameterValue;
            return(newCritProp);
        }
        public void Add(CslaObjectInfo mainObject, CslaObjectInfo secondaryObject)
        {
            if (RelationRulesEngine.IsAllowedEntityObject(mainObject))
            {
                if (RelationRulesEngine.IsAllowedEntityObject(secondaryObject))
                {
                    var entity = new AssociativeEntity(GeneratorController.Current.CurrentUnit);
                    entity.RelationType      = ObjectRelationType.ManyToMany;
                    entity.ObjectName        = mainObject.ObjectName + secondaryObject.ObjectName;
                    entity.MainLazyLoad      = false;
                    entity.SecondaryLazyLoad = false;

                    entity.MainObject             = mainObject.ObjectName;
                    entity.MainPropertyName       = secondaryObject.ObjectName + entity.Parent.Params.ORBChildPropertySuffix;
                    entity.MainItemTypeName       = mainObject.ObjectName + secondaryObject.ObjectName;
                    entity.MainCollectionTypeName = entity.MainItemTypeName + entity.Parent.Params.ORBCollectionSuffix;

                    var mainCriteriaInfo    = typeof(CslaObjectInfo).GetProperty("CriteriaObjects");
                    var mainCriteriaObjects = mainCriteriaInfo.GetValue(mainObject, null);
                    foreach (var crit in (CriteriaCollection)mainCriteriaObjects)
                    {
                        foreach (var prop in crit.Properties)
                        {
                            entity.MainLoadProperties.Add(CriteriaProperty.Clone(prop));
                        }
                    }

                    entity.SecondaryObject             = secondaryObject.ObjectName;
                    entity.SecondaryPropertyName       = mainObject.ObjectName + entity.Parent.Params.ORBChildPropertySuffix;
                    entity.SecondaryItemTypeName       = secondaryObject.ObjectName + mainObject.ObjectName;
                    entity.SecondaryCollectionTypeName = entity.SecondaryItemTypeName +
                                                         entity.Parent.Params.ORBCollectionSuffix;

                    var secondaryCriteriaInfo    = typeof(CslaObjectInfo).GetProperty("CriteriaObjects");
                    var secondaryCriteriaObjects = secondaryCriteriaInfo.GetValue(secondaryObject, null);
                    foreach (var crit in (CriteriaCollection)secondaryCriteriaObjects)
                    {
                        foreach (var prop in crit.Properties)
                        {
                            entity.SecondaryLoadProperties.Add(CriteriaProperty.Clone(prop));
                        }
                    }

                    Add(entity);
                }
                else
                {
                    throw new Exception(secondaryObject + " isn't a suitable object for this builder.");
                }
            }
            else
            {
                throw new Exception(mainObject + " isn't a suitable object for this builder.");
            }
        }
Пример #5
0
        internal static CriteriaProperty Clone(CriteriaProperty masterCritProp)
        {
            var newCritProp = new CriteriaProperty();

            newCritProp.DbBindColumn = (DbBindColumn)masterCritProp.DbBindColumn.Clone();
            ((Property)newCritProp).Clone(masterCritProp);
            newCritProp.DbBindColumn         = masterCritProp.DbBindColumn;
            newCritProp.CustomPropertyType   = masterCritProp.CustomPropertyType;
            newCritProp.ParameterValue       = masterCritProp.ParameterValue;
            newCritProp.InlineQueryParameter = masterCritProp.InlineQueryParameter;
            return(newCritProp);
        }
Пример #6
0
 public void AddPropertiesToCriteria(IEnumerable <ValueProperty> primaryKeyProperties, Criteria crit)
 {
     // Add all primary key properties to critera if they dont already exist
     foreach (var col in primaryKeyProperties)
     {
         if (!crit.Properties.Contains(col.Name))
         {
             var p = new CriteriaProperty(col.Name, col.PropertyType);
             p.DbBindColumn = (DbBindColumn)col.DbBindColumn.Clone();
             crit.Properties.Add(p);
         }
     }
 }
Пример #7
0
        private void AddTimestampProperty(Criteria defaultCriteria, ValueProperty timeStampProperty)
        {
            var timestampCriteria = new Criteria(_currentCslaObject);

            timestampCriteria.Name = "CriteriaTS";
            foreach (CriteriaProperty p in defaultCriteria.Properties)
            {
                CriteriaProperty newProp = (CriteriaProperty)ObjectCloner.CloneShallow(p);
                newProp.DbBindColumn = (DbBindColumn)p.DbBindColumn.Clone();
                timestampCriteria.Properties.Add(newProp);
            }
            AddPropertiesToCriteria(new ValueProperty[] { timeStampProperty }, timestampCriteria);
            timestampCriteria.DeleteOptions.Enable();
            timestampCriteria.SetSprocNames();
            _currentCslaObject.CriteriaObjects.Add(timestampCriteria);
        }