Example #1
0
        private static void SetupValueObject(PocoColumn pc, FastCreate fastCreate)
        {
            var        memberName      = "Value";
            var        hasIValueObject = pc.MemberInfoData.MemberType.GetTypeWithGenericTypeDefinitionOf(typeof(IValueObject <>));
            MemberInfo property        = string.IsNullOrEmpty(pc.ValueObjectColumnName)
                ? pc.MemberInfoData.MemberType.GetProperties().FirstOrDefault(x => x.Name.IndexOf(memberName, StringComparison.OrdinalIgnoreCase) >= 0)
                                         ?? pc.MemberInfoData.MemberType.GetProperties().First()
                : ReflectionUtils.GetFieldsAndProperties(pc.MemberInfoData.MemberType, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).First(x => x.Name == pc.ValueObjectColumnName);
            var type = hasIValueObject != null?hasIValueObject.GetGenericArguments().First() : property.GetMemberInfoType();

            var memberAccessor = hasIValueObject != null ? new MemberAccessor(typeof(IValueObject <>).MakeGenericType(type), memberName) : new MemberAccessor(pc.MemberInfoData.MemberType, property.Name);

            pc.SetValueObjectAccessors(fastCreate, (target, value) => memberAccessor.Set(target, value), target => memberAccessor.Get(target));
            pc.ColumnType = type;
        }