/// <summary> /// Gets the unique key and adds to the <see cref="DatabaseParameters"/> from an entity <paramref name="value"/>. /// </summary> /// <param name="parameters">The <see cref="DatabaseParameters"/>.</param> /// <param name="operationType">The single <see cref="Mapper.OperationTypes"/> that indicates that a <see cref="Mapper.OperationTypes.Create"/> is being performed; /// therefore any key properties marked as <see cref="PropertyMapperCustomBase{TSrce, TSrceProperty}.IsUniqueKeyAutoGeneratedOnCreate"/> have a parameter direction of /// <see cref="ParameterDirection.Output"/> versus <see cref="ParameterDirection.Input"/>.</param> /// <param name="value">The entity value.</param> public void GetKeyParams(DatabaseParameters parameters, OperationTypes operationType, TSrce value) { foreach (IDatabasePropertyMapper <TSrce> map in UniqueKey) { var dir = (operationType == OperationTypes.Create && map.IsUniqueKeyAutoGeneratedOnCreate) ? ParameterDirection.Output : ParameterDirection.Input; if (map.DestDbType.HasValue) { parameters.AddParameter(map.DestParameterName, (IComparable)map.GetSrceValue(value, operationType), map.DestDbType.Value, dir); } else { parameters.AddParameter(map.DestParameterName, (IComparable)map.GetSrceValue(value, operationType), dir); } } }
/// <summary> /// Sets the destination <see cref="DatabaseParameters"/> from the source property value. /// </summary> /// <param name="value">The source value.</param> /// <param name="parameters">The <see cref="DatabaseParameters"/>.</param> /// <param name="operationType">The single <see cref="Mapper.OperationTypes"/> being performed to enable selection.</param> public void SetDestValue(TSrce value, DatabaseParameters parameters, OperationTypes operationType) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } if (!OperationTypes.HasFlag(operationType)) { return; } if (parameters.Contains(DestParameterName)) { return; } if (_mapToDbOverride != null) { _mapToDbOverride(value, parameters, operationType); return; } var val = GetSrceValue(value, operationType); if (Mapper != null) { var em = (IDatabaseMapper)Mapper; em.MapToDb(val, parameters, operationType, this); } else { if (DestDbType.HasValue) { parameters.AddParameter(DestParameterName, Converter == null ? val : Converter.ConvertToDest(val), dbType: DestDbType.Value); } else { parameters.AddParameter(DestParameterName, Converter == null ? val : Converter.ConvertToDest(val)); } } }
/// <summary> /// Gets the unique key and adds to the <see cref="DatabaseParameters"/> for the listed key values. /// </summary> /// <param name="parameters">The <see cref="DatabaseParameters"/>.</param> /// <param name="operationType">The single <see cref="Mapper.OperationTypes"/> that indicates that a <see cref="Mapper.OperationTypes.Create"/> is being performed; /// therefore any key properties marked as <see cref="PropertyMapperCustomBase{TSrce, TSrceProperty}.IsUniqueKeyAutoGeneratedOnCreate"/> have a parameter direction of /// <see cref="ParameterDirection.Output"/> versus <see cref="ParameterDirection.Input"/>.</param> /// <param name="keys">The unique key values.</param> public void GetKeyParams(DatabaseParameters parameters, OperationTypes operationType, params IComparable[] keys) { var uq = operationType == OperationTypes.Create ? UniqueKey.Where(x => !x.IsUniqueKeyAutoGeneratedOnCreate).ToArray() : UniqueKey; if (keys == null || keys.Length != uq.Length) { throw new ArgumentException("The number of keys supplied must equal the number of properties identified as IsUniqueKey.", nameof(keys)); } for (int i = 0; i < keys.Length; i++) { var map = (IDatabasePropertyMapper)uq[i]; var dir = (operationType == OperationTypes.Create && map.IsUniqueKeyAutoGeneratedOnCreate) ? ParameterDirection.Output : ParameterDirection.Input; if (map.DestDbType.HasValue) { parameters.AddParameter(map.DestParameterName, keys[0], map.DestDbType.Value, dir); } else { parameters.AddParameter(map.DestParameterName, keys[0], dir); } } }