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); }
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."); } }
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); }
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); } } }
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); }