Beispiel #1
0
        internal static bool IsAssociation(MemberInfo member, IEntityMetadataProvider classMetadataProvider, out bool isScalar, out Type memberType)
        {
            memberType = member.GetUnderlyingType();
            if (memberType == typeof(string))
            {
                isScalar = false;
                return(false);
            }

            if (memberType.TryGetGenericType(typeof(IEnumerable <>), out var genericType))
            {
                isScalar   = false;
                memberType = genericType.GetGenericArguments()[0];
            }
            else if (typeof(IEnumerable).IsAssignableFrom(memberType))
            {
                memberType = null;
                isScalar   = false;
                return(true); // To be safe in case the enumerable is an uninitialized NHibernate collection
            }
            else
            {
                isScalar = true;
            }

            return(classMetadataProvider.IsEntityType(memberType));
        }
Beispiel #2
0
 public void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     foreach (OrderByItem item in _orderByItems)
     {
         item.Validate(entityType, entityMetadataProvider);
     }
 }
        private BaseBlock ToExpression(Type entityType, DataType returnDataType, IEntityMetadataProvider entityMetadataProvider)
        {
            String text = _sb.ToString();

            if (this._fnArgs == null)
            {
                if (PropertySignature.IsProperty(entityType, text, entityMetadataProvider))
                {
                    // TODO: we could check that the PropBlock dataType is compatible with the returnDataType
                    return(new PropBlock(text, entityType, entityMetadataProvider));
                }
                else
                {
                    return(new LitBlock(text, returnDataType));
                }
            }
            else
            {
                String fnName   = text;
                var    argTypes = FnBlock.GetArgTypes(fnName);
                if (argTypes.Count != _fnArgs.Count)
                {
                    throw new Exception("Incorrect number of arguments to '" + fnName
                                        + "' function; was expecting " + argTypes.Count);
                }
                var exprs = _fnArgs.Select((token, ix) => token.ToExpression(entityType, argTypes[ix], entityMetadataProvider)).ToList();
                // TODO: we could check that the FnBlock dataType is compatible with the returnDataType
                return(new FnBlock(text, exprs));
            }
        }
Beispiel #4
0
 // returns an IEnumerable<PropertyInfo> with nulls if invalid and throwOnError = true
 public static IEnumerable <PropertyInfo> GetProperties(
     Type instanceType,
     String propertyPath,
     IEntityMetadataProvider entityMetadataProvider,
     bool throwOnError = true)
 {
     return(GetProperties(instanceType, propertyPath, entityMetadataProvider, null, throwOnError));
 }
Beispiel #5
0
 /// <summary>
 /// Constructs an instance of <see cref="ClientModelMetadataProvider"/>.
 /// </summary>
 public ClientModelMetadataProvider(
     IEntityMetadataProvider entityMetadataProvider,
     ISyntheticPropertyNameConvention syntheticPropertyNameConvention,
     IDataTypeProvider dataTypeProvider)
 {
     _entityMetadataProvider          = entityMetadataProvider;
     _syntheticPropertyNameConvention = syntheticPropertyNameConvention;
     _dataTypeProvider = dataTypeProvider;
 }
 public FluentValidationPropertyValidatorsProvider(
     IValidatorFactory validatorFactory,
     IEntityMetadataProvider entityMetadataProvider,
     IClientModelMetadataProvider clientModelMetadataProvider)
 {
     _validatorFactory            = validatorFactory;
     _entityMetadataProvider      = entityMetadataProvider;
     _clientModelMetadataProvider = clientModelMetadataProvider;
 }
Beispiel #7
0
 /// <summary>
 /// Constructs an instance of <see cref="SaveWorkStateFactory"/>.
 /// </summary>
 public SaveWorkStateFactory(
     IEntityMetadataProvider entityMetadataProvider,
     IJsonSerializerSettingsProvider jsonSerializerSettingsProvider,
     INHibernateClassMetadataProvider classMetadataProvider)
 {
     _entityMetadataProvider = entityMetadataProvider;
     _classMetadataProvider  = classMetadataProvider;
     _jsonSerializer         = JsonSerializer.Create(jsonSerializerSettingsProvider.GetForSave());
 }
Beispiel #8
0
 /// <summary>
 /// Constructs an instance of <see cref="BreezeContractResolver"/>.
 /// </summary>
 public BreezeContractResolver(
     IBreezeConfigurator breezeConfigurator,
     IEntityMetadataProvider entityMetadataProvider,
     IClientModelMetadataProvider clientModelMetadataProvider,
     ILazyLoadGuardProvider lazyLoadGuardProvider)
 {
     _breezeConfigurator          = breezeConfigurator;
     _entityMetadataProvider      = entityMetadataProvider;
     _clientModelMetadataProvider = clientModelMetadataProvider;
     _lazyLoadGuardProvider       = lazyLoadGuardProvider;
 }
Beispiel #9
0
        public PropBlock(String propertyPath, Type entityType, IEntityMetadataProvider entityMetadataProvider)
        {
            EntityType   = entityType;
            PropertyPath = propertyPath;
            Property     = new PropertySignature(entityType, propertyPath, entityMetadataProvider);

            if (Property == null)
            {
                throw new Exception("Unable to validate propertyPath: " + PropertyPath + " on EntityType: " + entityType.Name);
            }
        }
 /// <summary>
 /// Constructs an instance of <see cref="BreezeMetadataBuilder"/>.
 /// </summary>
 public BreezeMetadataBuilder(
     INHibernateClassMetadataProvider classMetadataProvider,
     IEntityMetadataProvider entityMetadataProvider,
     IBreezeConfigurator breezeConfigurator,
     IClientModelMetadataProvider clientModelMetadataProvider,
     IPropertyValidatorsProvider propertyValidatorsProvider,
     IDataTypeProvider dataTypeProvider)
 {
     _classMetadataProvider       = classMetadataProvider;
     _entityMetadataProvider      = entityMetadataProvider;
     _breezeConfigurator          = breezeConfigurator;
     _clientModelMetadataProvider = clientModelMetadataProvider;
     _propertyValidatorsProvider  = propertyValidatorsProvider;
     _dataTypeProvider            = dataTypeProvider;
 }
Beispiel #11
0
 /**
  * Validates that all of the clauses that make up this query are consistent with the
  * specified EntityType.
  * @param entityType A EntityType
  */
 #region Modified code - Added entityMetadataProvider parameter
 public void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     _entityType = entityType;
     if (_wherePredicate != null)
     {
         _wherePredicate.Validate(entityType, entityMetadataProvider);
     }
     if (_orderByClause != null)
     {
         _orderByClause.Validate(entityType, entityMetadataProvider);
     }
     if (_selectClause != null)
     {
         _selectClause.Validate(entityType, entityMetadataProvider);
     }
 }
        public override void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
        {
            var block = BaseBlock.CreateLHSBlock(ExprSource, entityType, entityMetadataProvider);

            if (!(block is PropBlock))
            {
                throw new Exception("The first expression of this AnyAllPredicate must be a PropertyExpression");
            }
            this.NavPropBlock = (PropBlock)block;
            var prop = NavPropBlock.Property;

            if (prop.IsDataProperty || prop.ElementType == null)
            {
                throw new Exception("The first expression of this AnyAllPredicate must be a nonscalar Navigation PropertyExpression");
            }


            this.Predicate.Validate(prop.ElementType, entityMetadataProvider);
        }
Beispiel #13
0
        // will return either a PropBlock or a FnBlock
        #region Modified code - Added entityMetadataProvider parameter
        public static BaseBlock CreateLHSBlock(Object exprSource,
                                               Type entityType, IEntityMetadataProvider entityMetadataProvider)
        {
            if (exprSource == null)
            {
                throw new Exception(
                          "Null expressions are only permitted on the right hand side of a BinaryPredicate");
            }

            if (exprSource is IDictionary)
            {
                throw new Exception(
                          "Object expressions are only permitted on the right hand side of a BinaryPredicate");
            }

            if (exprSource is IList)
            {
                throw new Exception(
                          "Array expressions are only permitted on the right hand side of a BinaryPredicate");
            }

            if (!(exprSource is String))
            {
                throw new Exception(
                          "Only string expressions are permitted on this predicate");
            }

            String source = (String)exprSource;

            if (source.IndexOf("(") == -1)
            {
                return(new PropBlock(source, entityType, entityMetadataProvider));
            }
            else
            {
                return(FnBlock.CreateFrom(source, entityType, entityMetadataProvider));
            }
        }
        public override void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
        {
            if (Expr1Source == null)
            {
                throw new Exception("Unable to validate 1st expression: " + this.Expr1Source);
            }

            this._block1 = BaseBlock.CreateLHSBlock(Expr1Source, entityType, entityMetadataProvider);

            if (_op == Operator.In && !(Expr2Source is IList))
            {
                throw new Exception("The 'in' operator requires that its right hand argument be an array");
            }

            // Special purpose Enum handling

            var enumType = GetEnumType(this._block1);

            if (enumType != null)
            {
                if (Expr2Source != null)
                {
                    var et        = TypeFns.GetNonNullableType(enumType);
                    var expr2Enum = Enum.Parse(et, (String)Expr2Source);
                    this._block2 = BaseBlock.CreateRHSBlock(expr2Enum, entityType, null, entityMetadataProvider);
                }
                else
                {
                    this._block2 = BaseBlock.CreateRHSBlock(null, entityType, null, entityMetadataProvider);
                }
            }
            else
            {
                this._block2 = BaseBlock.CreateRHSBlock(Expr2Source, entityType, this._block1.DataType, entityMetadataProvider);
            }
        }
Beispiel #15
0
 public static FnBlock CreateFrom(String source, Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     return(FnBlockToken.ToExpression(source, entityType, entityMetadataProvider));
 }
 public abstract void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider);
Beispiel #17
0
 public BreezeEntityManager(IEntityMetadataProvider entityMetadataProvider)
 {
     _entityMetadataProvider = entityMetadataProvider;
 }
Beispiel #18
0
        // will return either a PropBlock or a LitBlock
        #region Modified code - Added entityMetadataProvider parameter
        public static BaseBlock CreateRHSBlock(Object exprSource,
                                               Type entityType, DataType otherExprDataType, IEntityMetadataProvider entityMetadataProvider)
        {
            if (exprSource == null)
            {
                return(new LitBlock(exprSource, otherExprDataType));
            }

            if (exprSource is String)
            {
                String source = (String)exprSource;
                if (entityType == null)
                {
                    // if entityType is unknown then assume that the rhs is a
                    // literal
                    return(new LitBlock(source, otherExprDataType));
                }

                if (PropertySignature.IsProperty(entityType, source, entityMetadataProvider))
                {
                    return(new PropBlock(source, entityType, entityMetadataProvider));
                }
                else
                {
                    return(new LitBlock(source, otherExprDataType));
                }
            }

            if (TypeFns.IsPredefinedType(exprSource.GetType()))
            {
                return(new LitBlock(exprSource, otherExprDataType));
            }

            if (exprSource is IDictionary <string, Object> )
            {
                var exprMap = (IDictionary <string, Object>)exprSource;
                // note that this is NOT the same a using get and checking for null
                // because null is a valid 'value'.
                if (!exprMap.ContainsKey("value"))
                {
                    throw new Exception(
                              "Unable to locate a 'value' property on: "
                              + exprMap.ToString());
                }
                Object value = exprMap["value"];

                if (exprMap.ContainsKey("isProperty"))
                {
                    return(new PropBlock((String)value, entityType, entityMetadataProvider));
                }
                else
                {
                    String   dt       = (String)exprMap["dataType"];
                    DataType dataType = (dt != null) ? DataType.FromName(dt) : otherExprDataType;
                    return(new LitBlock(value, dataType));
                }
            }

            if (exprSource is IList)
            {
                // right now this pretty much implies the values on an 'in' clause
                return(new LitBlock(exprSource, otherExprDataType));
            }

            if (TypeFns.IsEnumType(exprSource.GetType()))
            {
                return(new LitBlock(exprSource, otherExprDataType));
            }

            throw new Exception(
                      "Unable to parse the right hand side of this BinaryExpression: "
                      + exprSource.ToString());
        }
Beispiel #19
0
 /// <summary>
 /// Constructs an instance of <see cref="DefaultEntityQueryExecutor"/>.
 /// </summary>
 public DefaultEntityQueryExecutor(IEntityMetadataProvider entityMetadataProvider, IProxyInitializer proxyInitializer)
 {
     _entityMetadataProvider = entityMetadataProvider;
     _proxyInitializer       = proxyInitializer;
 }
Beispiel #20
0
 public void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     Property = new PropertySignature(entityType, PropertyPath, entityMetadataProvider);
 }
 public void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     _properties = _propertyPaths.Select(pp => new PropertySignature(entityType, pp, entityMetadataProvider)).ToList();
 }
Beispiel #22
0
 public PropertySignature(Type instanceType, String propertyPath, IEntityMetadataProvider entityMetadataProvider)
 {
     InstanceType = instanceType;
     PropertyPath = propertyPath;
     Properties   = GetProperties(InstanceType, PropertyPath, entityMetadataProvider, _syntheticProperties).ToList();
 }
        public static FnBlock ToExpression(String source, Type entityType, IEntityMetadataProvider entityMetadataProvider)
        {
            FnBlockToken token = ParseToken(source, 0);

            return((FnBlock)token.ToExpression(entityType, null, entityMetadataProvider));
        }
 public override void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     Predicate.Validate(entityType, entityMetadataProvider);
 }
Beispiel #25
0
 public static bool IsProperty(Type instanceType, String propertyPath, IEntityMetadataProvider entityMetadataProvider)
 {
     return(GetProperties(instanceType, propertyPath, entityMetadataProvider, null, false).Any(pi => pi != null));
 }
Beispiel #26
0
 /// <summary>
 /// Constructs an instance of <see cref="DefaultLazyLoadGuardProvider"/>.
 /// </summary>
 public DefaultLazyLoadGuardProvider(IEntityMetadataProvider entityMetadataProvider)
 {
     _entityMetadataProvider = entityMetadataProvider;
 }
Beispiel #27
0
        private static IEnumerable <PropertyInfo> GetProperties(Type instanceType, String propertyPath, IEntityMetadataProvider entityMetadataProvider,
                                                                ICollection <PropertyInfo> syntheticProperties, bool throwOnError = true)
        {
            var propertyNames = propertyPath.Split('.');

            var nextInstanceType = instanceType;
            var nextMetadata     = entityMetadataProvider.IsEntityType(nextInstanceType) ? entityMetadataProvider.GetMetadata(instanceType) : null;

            foreach (var propertyName in propertyNames)
            {
                PropertyInfo property;
                if (nextMetadata != null && nextMetadata.SyntheticForeignKeyProperties.TryGetValue(propertyName, out var syntheticProperty))
                {
                    yield return(GetProperty(nextInstanceType, syntheticProperty.AssociationPropertyName, throwOnError));

                    property = GetProperty(syntheticProperty.EntityType, syntheticProperty.IdentifierPropertyName, throwOnError);
                    syntheticProperties?.Add(property);
                }
                else
                {
                    property = GetProperty(nextInstanceType, propertyName, throwOnError);
                }

                if (property != null)
                {
                    yield return(property);

                    nextInstanceType = property.PropertyType;
                    nextMetadata     = entityMetadataProvider.IsEntityType(nextInstanceType) ? entityMetadataProvider.GetMetadata(nextInstanceType) : null;
                }
                else
                {
                    break;
                }
            }
        }
 public override void Validate(Type entityType, IEntityMetadataProvider entityMetadataProvider)
 {
     _predicates.ForEach(p => p.Validate(entityType, entityMetadataProvider));
 }