예제 #1
0
        public List <PropertyConfig> DoCheckFieldes(string arg)
        {
            var columns = new List <PropertyConfig>();
            var lines   = Fields.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            var idx     = 0;

            foreach (var line in lines)
            {
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }
                var words = line.Trim().Split(new[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);

                var name = words[0].TrimStart('_').ToUWord();

                /*
                 * 文本说明:
                 * 1 每行为一条数据
                 * 2 每个单词用逗号分开
                 * 3 第一个单词 代码名称; 第二个单词 数据类型;第三个单词 说明文本
                 */
                PropertyConfig column = new PropertyConfig
                {
                    IsPrimaryKey = name.Equals("ID", StringComparison.OrdinalIgnoreCase),
                    ColumnName   = name,
                    Name         = name,
                    CsType       = "string",
                    DbType       = "nvarchar"
                };
                column.Option.Index = idx++;
                if (words.Length > 1)
                {
                    CsharpHelper.CheckType(column, words[1]);
                }
                if (words.Length > 2)
                {
                    column.Caption = words[2];
                }
                if (words.Length > 3)
                {
                    column.Description = words.Length < 4 ? null : words.Skip(3).LinkToString(",");
                }
                var old = columns.FirstOrDefault(p => p != null && p.Name == name);
                if (old != null)
                {
                    columns.Remove(old);
                }
                columns.Add(column);
            }

            return(columns);
        }
예제 #2
0
        private static void CheckPropertyType(Type type, EntityConfig entity, PropertyConfig prperty, MemberInfo field, Type fieldType, bool json, bool dataMember)
        {
            try
            {
                prperty.Nullable = fieldType.IsSubclassOf(typeof(Nullable <>));
                Type type1 = prperty.Nullable ? fieldType.GetGenericArguments()[0] : fieldType;
                if (type1.IsArray)
                {
                    prperty.ReferenceType = ReflectionHelper.GetTypeName(type1);
                    prperty.IsArray       = true;
                    type1 = type1.MakeArrayType();
                }
                else if (type1.IsSupperInterface(typeof(IDictionary <,>)))
                {
                    prperty.ReferenceType = ReflectionHelper.GetTypeName(type1);
                    var pars = type1.GetGenericArguments();
                    prperty.IsDictionary = true;
                    prperty.CsType       = ReflectionHelper.GetTypeName(type1);
                    type1 = pars[1];
                }
                else if (type1.IsGenericType && type1.IsSupperInterface(typeof(IEnumerable <>)))
                {
                    prperty.ReferenceType = ReflectionHelper.GetTypeName(type1);
                    prperty.IsArray       = true;
                    type1 = type1.GetGenericArguments()[0];
                }

                CsharpHelper.CheckType(prperty, type1.GetTypeName());
                if (type1.IsEnum)
                {
                    prperty.CustomType = ReflectionHelper.GetTypeName(type1);
                    prperty.CsType     = "int";
                    prperty.IsEnum     = true;
                }
                else if (!type1.IsBaseType())
                {
                    //prperty.CustomType = ReflectionHelper.GetTypeName(type1);
                    prperty.NoStorage   = true;
                    prperty.IsLinkField = true;
                    prperty.LinkTable   = prperty.CustomType;
                }
            }
            catch (Exception ex)
            {
                prperty.CsType = "object";
                Trace.WriteLine(ex, $"Error : {type.FullName}.{field.Name}");
            }
            if (json)
            {
                var ji = field.GetAttribute <JsonIgnoreAttribute>();
                if (ji != null)
                {
                    prperty.NoneJson = true;
                }
                else
                {
                    var jp = field.GetAttribute <JsonPropertyAttribute>();
                    if (jp == null)
                    {
                        return;
                    }
                    prperty.NoneJson = false;
                    if (!string.IsNullOrWhiteSpace(jp.PropertyName))
                    {
                        prperty.JsonName = jp.PropertyName;
                    }
                }
            }
            else if (dataMember)
            {
                var id = field.GetAttribute <IgnoreDataMemberAttribute>();
                if (id != null)
                {
                    prperty.NoneJson = true;
                }
                var dm = field.GetAttribute <DataMemberAttribute>();
                if (dm == null)
                {
                    return;
                }
                prperty.NoneJson = false;
                if (!string.IsNullOrWhiteSpace(dm.Name))
                {
                    prperty.JsonName = dm.Name;
                }
            }
        }