public object this[ string propertyName] { get { foreach (var property in _extraProperties.Keys) { if (property .ToLower() == propertyName .ToLower()) { return(_extraProperties[property]); } } foreach (var property in GetType() .GetProperties()) { if (property.Name .ToLower() == propertyName .ToLower()) { return(GDbReflectionHelper .GetValueOfProperty( this, property.Name)); } } throw new InvalidOperationException( "This object has no '" + propertyName + "' property (case-insensitive)."); } set { foreach (var property in GetType() .GetProperties()) { if (property.Name .ToLower() == propertyName .ToLower()) { GDbReflectionHelper .SetValueOfProperty( this, property.Name, value); return; } } _extraProperties[propertyName] = value; } }
public IGDbModelDescriptor ToMany( Type relatedType, string relatedProperty = null) { var typeOfProperty = GDbReflectionHelper .GetTypeOfProperty( GDbModelDescriptor.TargetType, _property); if (typeOfProperty .IsCollectionType()) { if (typeOfProperty .GetCollectionType() == relatedType) { if (relatedProperty != null) { if (relatedType .HasProperty( relatedProperty)) { var typeOfRelatedProperty = GDbReflectionHelper .GetTypeOfProperty( relatedType, relatedProperty); if (typeOfProperty .GetCollectionType() == GDbModelDescriptor.TargetType || !typeOfRelatedProperty .IsCollectionType()) { if (typeOfRelatedProperty != GDbModelDescriptor.TargetType) { if (typeOfRelatedProperty .GetCollectionType() != GDbModelDescriptor.TargetType) { throw new ArgumentException( "Incorrect related property: '" + relatedProperty + "' is not a '" + GDbModelDescriptor.TargetType.Name + "' type property.", nameof(relatedProperty)); } } } else { throw new ArgumentException( "Incorrect related property: '" + relatedProperty + "' is a collection. Many-to-many is not supported.", nameof(relatedProperty)); } } else { throw new ArgumentException( "Incorrect related property: '" + relatedType.Name + "' has no property with name '" + relatedProperty + "'.", nameof(relatedProperty)); } } } else { throw new ArgumentException( "Incorrect related type: '" + relatedType.Name + "' for property '" + _property + "'.", nameof(relatedType)); } } else { throw new InvalidOperationException( "Property '" + _property + "' is not a collection, so can not be used with 'ToMany()'."); } GDbModelDescriptor.AddModelDescriptorEntry( GDbModelDescriptorEntryTypes.EDGE, _name, _property, relatedProperty); return(_gDbModelDescriptor); }