Beispiel #1
0
        /// <summary>
        /// Adds (or gets) a <see cref="DatabasePropertyMapper{TSrce, TSrceProperty}"/>.
        /// </summary>
        /// <typeparam name="TSrceProperty">The source property <see cref="Type"/>.</typeparam>
        /// <param name="srcePropertyExpression">The <see cref="Expression"/> to reference the source entity property.</param>
        /// <param name="columnName">The database column name.</param>
        /// <param name="operationTypes">The <see cref="Mapper.OperationTypes"/> selection to enable inclusion or exclusion of property (default to <see cref="OperationTypes.Any"/>).</param>
        /// <param name="property">An <see cref="Action"/> enabling access to the created <see cref="DatabasePropertyMapper{TSrce, TSrceProperty}"/>.</param>
        /// <returns>The <see cref="DatabaseMapper{TEntity}"/>.</returns>
        public DatabaseMapper <TSrce> HasProperty <TSrceProperty>(Expression <Func <TSrce, TSrceProperty> > srcePropertyExpression, string columnName = null, OperationTypes operationTypes = OperationTypes.Any, Action <DatabasePropertyMapper <TSrce, TSrceProperty> > property = null)
        {
            if (srcePropertyExpression == null)
            {
                throw new ArgumentNullException(nameof(srcePropertyExpression));
            }

            var spe = PropertyExpression <TSrce, TSrceProperty> .Create(srcePropertyExpression);

            var px = GetBySrcePropertyName(spe.Name);

            if (px != null && px.DestPropertyName != columnName)
            {
                throw new ArgumentException($"Source property '{srcePropertyExpression.Name}' mapping already exists with a different destination column name");
            }

            DatabasePropertyMapper <TSrce, TSrceProperty> p = null;

            if (px == null)
            {
                p = Property(srcePropertyExpression, columnName, operationTypes);
            }
            else
            {
                p = (DatabasePropertyMapper <TSrce, TSrceProperty>)px;
            }

            property?.Invoke(p);
            return(this);
        }
Beispiel #2
0
        /// <summary>
        /// Adds a <see cref="DatabasePropertyMapper{TSrce, TSrceProperty}"/> to the mapper.
        /// </summary>
        /// <typeparam name="TSrceProperty">The source property <see cref="Type"/>.</typeparam>
        /// <param name="srcePropertyExpression">The <see cref="Expression"/> to reference the source entity property.</param>
        /// <param name="columnName">The database column name.</param>
        /// <param name="operationTypes">The <see cref="Mapper.OperationTypes"/> selection to enable inclusion or exclusion of property (default to <see cref="OperationTypes.Any"/>).</param>
        /// <returns>The <see cref="DatabasePropertyMapper{TEntity, TProperty}"/>.</returns>
        public DatabasePropertyMapper <TSrce, TSrceProperty> Property <TSrceProperty>(Expression <Func <TSrce, TSrceProperty> > srcePropertyExpression, string columnName = null, OperationTypes operationTypes = OperationTypes.Any)
        {
            if (srcePropertyExpression == null)
            {
                throw new ArgumentNullException(nameof(srcePropertyExpression));
            }

            DatabasePropertyMapper <TSrce, TSrceProperty> mapping = new DatabasePropertyMapper <TSrce, TSrceProperty>(srcePropertyExpression, columnName, operationTypes);

            AddPropertyMapper <TSrceProperty>(mapping);
            return(mapping);
        }