Mercurial > pub > bltoolkit
diff Source/Mapping/Fluent/FluentMapHelper.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Mapping/Fluent/FluentMapHelper.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,72 @@ +using BLToolkit.Reflection.Extension; + +namespace BLToolkit.Mapping.Fluent +{ + public static class FluentMapHelper + { + public static void MergeExtensions(ExtensionList fromExt, ref ExtensionList toExt) + { + foreach (var kv in fromExt) + { + TypeExtension toType; + if (toExt.TryGetValue(kv.Key, out toType)) + { + MergeExtensions(kv.Value, ref toType); + } + else + { + toExt.Add(kv.Key, kv.Value); + } + } + } + + public static void MergeExtensions(TypeExtension fromExt, ref TypeExtension toExt) + { + if (ReferenceEquals(fromExt, toExt)) + { + return; + } + foreach (var attribute in fromExt.Attributes) + { + AttributeExtensionCollection attrs; + if (toExt.Attributes.TryGetValue(attribute.Key, out attrs)) + { + MergeExtensions(attribute.Value, ref attrs); + } + else + { + toExt.Attributes.Add(attribute.Key, attribute.Value); + } + } + foreach (var member in fromExt.Members) + { + MemberExtension value; + if (toExt.Members.TryGetValue(member.Key, out value)) + { + MergeExtensions(member.Value, ref value); + } + else + { + toExt.Members.Add(member.Key, member.Value); + } + } + } + + private static void MergeExtensions(MemberExtension fromExt, ref MemberExtension toExt) + { + foreach (var attribute in fromExt.Attributes) + { + if (toExt.Attributes.ContainsKey(attribute.Key)) + { + toExt.Attributes.Remove(attribute.Key); + } + toExt.Attributes.Add(attribute.Key, attribute.Value); + } + } + + private static void MergeExtensions(AttributeExtensionCollection fromExt, ref AttributeExtensionCollection toExt) + { + toExt.AddRange(fromExt); + } + } +} \ No newline at end of file