示例#1
0
        private DbTable CacheTable(Type tableType, string defaultName)
        {
            if (!DbTables.ContainsKey(tableType))
            {
                var tableAttr = tableType.GetCustomAttribute <TableAttribute>();
                var tableName = tableAttr?.For(x => $"{x.Schema}.{x.Name}") ?? defaultName;

                var filedTypes  = tableType.GetProperties().Where(x => x.CanRead && x.CanWrite).ToArray();
                var tableFields = filedTypes.Select(type => new DbTableField
                {
                    Name        = type.Name,
                    DisplayName = DataAnnotationEx.GetDisplayName(type),
                    RuntimeType = type.PropertyType,
                    Index       = type.HasAttribute <KeyAttribute>() ? "Key"
                        : type.HasAttribute <CPKeyAttribute>() ? "CPKey"
                        : type.GetCustomAttribute <IndexAttribute>()?.For(x => $"{x.Type} {x.Group?.For(g => $"({g})")}") ?? "",
                    MaxLength     = type.GetCustomAttribute <StringLengthAttribute>()?.MaximumLength ?? null,
                    Required      = type.HasAttribute <RequiredAttribute>(),
                    ReferenceType = type.GetCustomAttribute <ForeignKeyAttribute>()?.Name.For(name =>
                    {
                        return(tableType.GetProperty(name).PropertyType);
                    }),
                }).ToArray();

                var dbTable = new DbTable
                {
                    Name        = tableName,
                    DisplayName = DataAnnotationEx.GetDisplayName(tableType),
                    TableFields = tableFields,
                };
                DbTables[tableType] = dbTable;
            }

            return(DbTables[tableType]);
        }
示例#2
0
        public static SelectList GetSelectList(Enum @enum)
        {
            var fields = @enum.GetType().GetFields().Where(x => !x.IsSpecialName);

            return(new SelectList(fields.Select(field => new
            {
                Value = field.Name,
                Text = DataAnnotationEx.GetDisplayName(field),
            }), "Value", "Text", @enum.ToString()));
        }
示例#3
0
        public static SelectList GetSelectList <TEnum>()
            where TEnum : struct
        {
            var fields = typeof(TEnum).GetFields().Where(x => !x.IsSpecialName);

            return(new SelectList(fields.Select(field => new
            {
                Value = field.Name,
                Text = DataAnnotationEx.GetDisplayName(field),
            }), "Value", "Text"));
        }
示例#4
0
 public RowChangeInfo(IEnumerable <PropertyEntry> entries)
 {
     foreach (var entry in entries)
     {
         Add(entry.Metadata.PropertyInfo.Name, new FieldChangeInfo
         {
             Display    = DataAnnotationEx.GetDisplayName(entry.Metadata.PropertyInfo),
             IsModified = entry.IsModified,
             Origin     = entry.OriginalValue,
             Current    = entry.CurrentValue,
         });
     }
 }
示例#5
0
        public static Dictionary <string, string> ToDisplayDictionary(this IEntity @this, params string[] propNames)
        {
            var type  = @this.GetType();
            var props = type.GetProperties().Where(x => propNames.Contains(x.Name));

            var ret = new Dictionary <string, string>();

            foreach (var prop in props)
            {
                ret.Add(prop.Name, DataAnnotationEx.GetDisplayString(@this, prop.Name));
            }

            return(ret);
        }
示例#6
0
        public string GetCsv()
        {
            var sb = new StringBuilder();

            void appendLine(string[] cols)
            {
                sb.AppendLine(cols.Select(x => $"\"{x?.Replace("\"", "\"\"")}\"").Join(","));
            }

            foreach (var table in DbTables.Values)
            {
                appendLine(new[] { table.Name, table.DisplayName.For(name => name == table.Name ? "" : name) });
                appendLine(new[] { "Field", "Display", "Runtime Type", "Max Length", "Index", "Required", "Reference", "Note" });

                foreach (var field in table.TableFields)
                {
                    appendLine(new[]
                    {
                        field.Name,
                        field.DisplayName,
                        field.RuntimeType.GetSimplifiedName(),
                        field.MaxLength?.ToString(),
                        field.Index,
                        field.Required ? "Required" : "",
                        field.ReferenceType?.For(type => DbTables[type].Name),
                        field.RuntimeType.For(type =>
                        {
                            if (type.IsEnum)
                            {
                                var values = type.GetFields().Where(x => x.Name != "value__").Select(x => new
                                {
                                    Name      = DataAnnotationEx.GetDisplayName(x),
                                    LongValue = Convert.ChangeType(Enum.Parse(type, x.Name), typeof(long)),
                                });
                                var note = values.Select(value => $"{value.LongValue}={value.Name}").Join(" ");
                                return(note);
                            }
                            else
                            {
                                return("");
                            }
                        }),
                    });
                }
                appendLine(new[] { "" });
            }

            return(sb.ToString());
        }
示例#7
0
        private DbTable CacheTable(Type tableType, string defaultName)
        {
            if (!DbTables.ContainsKey(tableType))
            {
                var tableAttr = tableType.GetAttributeViaName("System.ComponentModel.DataAnnotations.Schema.TableAttribute");
                var tableName = tableAttr?.GetReflector().For(x => $"{x.Property<string>("Schema").Value}.{x.Property<string>("Name").Value}") ?? defaultName;

                var filedTypes  = tableType.GetProperties().Where(x => x.CanRead && x.CanWrite).ToArray();
                var tableFields = filedTypes.Select(type => new DbTableField
                {
                    Name        = type.Name,
                    DisplayName = DataAnnotationEx.GetDisplayName(type),
                    RuntimeType = type.PropertyType,
                    Index       = type.HasAttributeViaName("System.ComponentModel.DataAnnotations.KeyAttribute") ? "Key"
                        : type.HasAttributeViaName($"LinqSharp.EFCore.CPKeyAttribute") ? "CPKey"
                        : type.GetAttributeViaName($"LinqSharp.EFCore.IndexAttribute")?.GetReflector().For(x => $"{x.Property<Enum>("Type").Value} {x.Property<string>("Group").Value?.For(g => $"({g})")}") ?? "",
                    MaxLength     = type.GetAttributeViaName("System.ComponentModel.DataAnnotations.StringLengthAttribute")?.GetReflector().For(x => x.Property <int>("MaximumLength").Value) ?? null,
                    Required      = type.HasAttributeViaName("System.ComponentModel.DataAnnotations.RequiredAttribute"),
                    ReferenceType = type.GetAttributeViaName("System.ComponentModel.DataAnnotations.Schema.ForeignKeyAttribute")?.GetReflector().For(x =>
                    {
                        var name = x.Property <string>("Name").Value;
                        return(tableType.GetProperty(name).PropertyType);
                    }),
                }).ToArray();

                var dbTable = new DbTable
                {
                    Name        = tableName,
                    DisplayName = DataAnnotationEx.GetDisplayName(tableType),
                    TableFields = tableFields,
                };
                DbTables[tableType] = dbTable;
            }

            return(DbTables[tableType]);
        }
示例#8
0
 public static string Display <TEntity, TRet>(this IEntity <TEntity> @this, Expression <Func <TEntity, TRet> > expression, string defaultReturn = "")
     where TEntity : class, IEntity <TEntity>, new()
 => DataAnnotationEx.GetDisplayString(@this, expression, defaultReturn);
示例#9
0
 public static string Display(this IEntity @this, LambdaExpression expression, string defaultReturn = "") => DataAnnotationEx.GetDisplayString(@this, expression, defaultReturn);
示例#10
0
        public string GetHtml()
        {
            var sb = new StringBuilder();

            sb.AppendLine("<!DOCTYPE html>");
            sb.AppendLine("<html>");
            sb.AppendLine("<head>");
            sb.AppendLine(@"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />");
            sb.AppendLine("</head>");
            sb.AppendLine("<body>");
            void appendLine(string[] cols, string tag = "td")
            {
                sb.AppendLine("<tr>");
                sb.AppendLine(cols.Select(x => $"<{tag}>{x}</{tag}>").Join(""));
                sb.AppendLine("</tr>");
            }

            foreach (var table in DbTables.Values)
            {
                sb.AppendLine(@"<table style=""border-collapse:collapse; width:100%"" border=""1"">");
                sb.AppendLine(@"<col width=""10%"">".Repeat(7));

                appendLine(new[] { table.Name, table.DisplayName.For(name => name == table.Name ? "" : name) });
                appendLine(new[] { "Field", "Display", "Runtime Type", "Max Length", "Index", "Required", "Reference", "Note" }, "th");

                foreach (var field in table.TableFields)
                {
                    appendLine(new[]
                    {
                        field.Name,
                        field.DisplayName.Flow(StringFlow.HtmlEncode),
                        field.RuntimeType.GetSimplifiedName().Flow(StringFlow.HtmlEncode),
                        field.MaxLength?.ToString(),
                        field.Index.Flow(StringFlow.HtmlEncode),
                        field.Required ? "Required" : "",
                        field.ReferenceType?.For(type => DbTables[type].Name),
                        field.RuntimeType.For(type =>
                        {
                            if (type.IsEnum)
                            {
                                var values = type.GetFields().Where(x => x.Name != "value__").Select(x => new
                                {
                                    Name      = DataAnnotationEx.GetDisplayName(x),
                                    LongValue = Convert.ChangeType(Enum.Parse(type, x.Name), typeof(long)),
                                });
                                var note = values.Select(value => $"<li>{$"{value.LongValue}={value.Name}".Flow(StringFlow.HtmlEncode)}</li>").Join("");
                                return($"<ul>{note}</ul>");
                            }
                            else
                            {
                                return("");
                            }
                        }),
                    });
                }
                sb.AppendLine("</table>");
                sb.AppendLine("<p></p>");
            }
            sb.AppendLine("</body>");
            sb.AppendLine("</html>");

            return(sb.ToString());
        }