示例#1
0
        public TargetMapperBuilder(IDynamicAssembly assembly)
        {
            Assembly = assembly;

            var mapperCache = new MapperCache();

            _classMapperBuilder           = new ClassMapperBuilder(mapperCache, this);
            _collectionMapperBuilder      = new CollectionMapperBuilder(mapperCache, this);
            _convertibleTypeMapperBuilder = new ConvertibleTypeMapperBuilder(this);
            _customTypeMapperBuilder      = new CustomTypeMapperBuilder(this);

            NameMatching = DefaultNameMatching;
        }
示例#2
0
        protected override object MapCoreLoop(object source, object target)
        {
            var    key = GetKey(source);
            object rst;
            var    flag = MapperCache.TryGet(key, out rst);

            if (flag)
            {
                return(rst);
            }
            var result = innerMapper(source, target, 0);

            MapperCache.Set(key, result);
            innerMapperRef?.Invoke(source, result, 0);
            return(result);
        }
示例#3
0
 /// <summary>
 /// 批量转换
 /// </summary>
 /// <typeparam name="TSource">源类型</typeparam>
 /// <typeparam name="TTarget">目标类型</typeparam>
 /// <param name="source">源对象集合</param>
 /// <returns>转换结果</returns>
 public static IEnumerable <TTarget> Map <TSource, TTarget>(IEnumerable <TSource> source)
 {
     try
     {
         MapperUtil.PreMap(source);
         var target = MapperUtil.MapCores <TSource, TTarget>(source, 0);
         MapperUtil.PostMap(target);
         return(target);
     }
     catch (Exception ex)
     {
         MapperUtil.OnError(ex);
         throw;
     }
     finally
     {
         if (mapperConfig.ReferencePropertyHandle == ReferencePropertyHandle.Loop)
         {
             MapperCache.Clear();
         }
     }
 }
示例#4
0
 /// <summary>
 /// 转换对象
 /// </summary>
 /// <typeparam name="TSource">源类型</typeparam>
 /// <typeparam name="TTarget">目标类型</typeparam>
 /// <param name="source">源对象</param>
 /// <param name="target">目标对象</param>
 /// <returns>返回转换结果</returns>
 public static TTarget Map <TSource, TTarget>(TSource source, TTarget target = default)
 {
     try
     {
         MapperUtil.PreMap(source);
         target = MapperUtil.MapCore <TSource, TTarget>(source, target, 0);
         MapperUtil.PostMap(target);
         return(target);
     }
     catch (Exception ex)
     {
         MapperUtil.OnError(ex);
         throw;
     }
     finally
     {
         if (mapperConfig.ReferencePropertyHandle == ReferencePropertyHandle.Loop)
         {
             MapperCache.Clear();
         }
     }
 }
示例#5
0
 public MemberMapper(MapperCache mapperCache, IMapperBuilderConfig config)
 {
     _mapperCache = mapperCache;
     _config      = config;
 }
示例#6
0
 public void AddMapper(MapperCache value)
 {
     MapperCache = value.ToOption();
 }
示例#7
0
 public MemberEmitterDescription(IEmitter emitter, MapperCache mappers)
 {
     Emitter     = emitter;
     MapperCache = new Option <MapperCache>(mappers, mappers.IsEmpty);
 }
 public CollectionMapperBuilder(MapperCache mapperCache, IMapperBuilderConfig config) : base(config)
 {
     _mapperCache = mapperCache;
 }
示例#9
0
 public ClassMapperBuilder(MapperCache mapperCache, IMapperBuilderConfig config) : base(config)
 {
     _mapperCache          = mapperCache;
     _memberMapper         = new MemberMapper(mapperCache, config);
     _mappingMemberBuilder = new MappingMemberBuilder(config);
 }
示例#10
0
        /// <summary>Get or create a new mapper for the specified type and mapper key</summary>
        /// <typeparam name="T">Generic type parameter.</typeparam>
        /// <param name="mapperKey">The mapper key.</param>
        /// <returns>A DapperPlusConfig&lt;T&gt;</returns>
        public static DapperPlusEntityMapper <T> Entity <T>(string mapperKey = null)
        {
            var config = MapperCache.GetOrAdd(GetFullMapperKey <T>(mapperKey), s => new DapperPlusEntityMapper <T>());

            return((DapperPlusEntityMapper <T>)config);
        }
示例#11
0
 public static IClassInfo ClassInfo(Type type)
 {
     return(MapperCache.GetClassInfo(type, Config));
 }
示例#12
0
 /// <summary>
 /// Zeroes out the primary key, disconnecting an item from the database
 /// </summary>
 /// <param name="obj"></param>
 public static void Disconnect(object obj)
 {
     MapperCache.GetClassInfo(obj.GetType()).PrimaryKeyField.SetValue(obj, 0);
 }
示例#13
0
 /// <summary>
 /// Track changes to an object
 /// </summary>
 /// <param name="obj"></param>
 public static void Track(object obj)
 {
     IObjectData data = MapperCache.GetOrCreateObjectData(obj);
 }
示例#14
0
 /// <summary>
 /// Clears all cached class metadata
 /// </summary>
 public static void ClearCache()
 {
     MapperCache.ClearCache();
 }