Esempio n. 1
0
        /// <summary>
        /// Determines if a mapping exists in this <see cref="MapperContext"/>.
        /// </summary>
        /// <param name="destinationType"></param>
        /// <param name="sourceType"></param>
        /// <returns></returns>
        public bool Contains(Type destinationType, Type sourceType)
        {
            var hash = Mapping.ComputeHash(destinationType, sourceType);

            Lock.EnterReadLock();

            try
            {
                return(MappingRows.ContainsKey(hash));
            }
            finally
            {
                Lock.ExitReadLock();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Determines if a mapping exists in this <see cref="MapperContext"/>.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool Contains(Mapping item)
        {
            var hash = Mapping.ComputeHash(item);

            Lock.EnterReadLock();

            try
            {
                return(MappingRows.ContainsKey(hash));
            }
            finally
            {
                Lock.ExitReadLock();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Merges another <see cref="MapperContext"/> with this instance of <see cref="MapperContext"/>.
        /// </summary>
        /// <remarks>
        /// This will modify current object.
        /// </remarks>
        /// <param name="mapperContext"></param>
        /// <param name="mergeBehavior"></param>
        /// <exception cref="InvalidOperationException"></exception>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public void MergeWith(MapperContext mapperContext,
                              MapperContextMergeBehavior mergeBehavior = MapperContextMergeBehavior.ThrowException)
        {
            switch (mergeBehavior)
            {
            case MapperContextMergeBehavior.OverwriteDuplicates:
            {
                Lock.EnterWriteLock();

                try
                {
                    foreach (var row in mapperContext.MappingRows)
                    {
                        MappingRows[row.Key] = row.Value;
                    }
                }
                finally
                {
                    Lock.ExitWriteLock();
                }

                break;
            }

            case MapperContextMergeBehavior.SkipDuplicates:
            {
                Lock.EnterWriteLock();

                try
                {
                    foreach (var row in mapperContext.MappingRows)
                    {
                        if (!MappingRows.ContainsKey(row.Key))
                        {
                            MappingRows[row.Key] = row.Value;
                        }
                    }
                }
                finally
                {
                    Lock.ExitWriteLock();
                }

                break;
            }

            case MapperContextMergeBehavior.ThrowException:
            {
                Lock.EnterReadLock();

                try
                {
                    foreach (var row in mapperContext.MappingRows)
                    {
                        if (MappingRows.ContainsKey(row.Key))
                        {
                            throw new InvalidOperationException();
                        }
                    }
                }
                finally
                {
                    Lock.ExitReadLock();
                }

                break;
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(mergeBehavior), mergeBehavior, null);
            }
        }