/// <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); }
/// <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); }