protected virtual string GetFileName(DiffTable t)
        {
            string name = t.Name.ToString().Replace('.', '\\');

            name = Regex.Replace(name, "[" + Regex.Escape(new string(Path.GetInvalidPathChars())) + "]", "");

            return name + ".cs";
        }
        protected virtual string GetFileName(DiffTable t)
        {
            var mli = this.GetMListInfo(t);
            if (mli != null)
                return this.GetFileName(this.Tables.GetOrThrow(mli.BackReferenceColumn.ForeignKey.TargetTable));

            string name = t.Name.ToString().Replace('.', '\\');

            name = Regex.Replace(name, "[" + Regex.Escape(new string(Path.GetInvalidPathChars())) + "]", "");

            return name + ".cs";
        }
Пример #3
0
        protected virtual string WriteToString(DiffTable table)
        {
            var toStringColumn = GetToStringColumn(table);

            if (toStringColumn == null)
            {
                return(null);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("static Expression<Func<{0}, string>> ToStringExpression = e => e.{1}{2};".FormatWith(GetEntityName(table.Name),
                                                                                                                toStringColumn.PrimaryKey ? "Id" : GetFieldName(table, toStringColumn).FirstUpper(),
                                                                                                                toStringColumn.PrimaryKey || GetFieldType(table, toStringColumn, GetRelatedEntity(table, toStringColumn)) != "string" ? " + \"\"" : ""));
            sb.AppendLine("[ExpressionField]");
            sb.AppendLine("public override string ToString()");
            sb.AppendLine("{");
            sb.AppendLine("    return ToStringExpression.Evaluate(this);");
            sb.AppendLine("}");
            return(sb.ToString());
        }
Пример #4
0
        protected virtual string GetFieldType(DiffTable table, DiffColumn col, string?relatedEntity)
        {
            if (relatedEntity != null)
            {
                if (IsEnum(Tables.GetOrThrow(col.ForeignKey !.TargetTable)))
                {
                    return(col.Nullable ? relatedEntity + "?" : relatedEntity);
                }

                return(IsLite(table, col) ? "Lite<" + relatedEntity + ">" : relatedEntity);
            }

            var valueType = GetValueType(col);

            if (col.Nullable)
            {
                return(valueType.Nullify().TypeName());
            }

            return(valueType.TypeName());
        }
Пример #5
0
        protected virtual string GetPrimaryKeyAttribute(DiffTable table)
        {
            DiffColumn primaryKey = GetPrimaryKeyColumn(table);

            if (primaryKey == null)
            {
                return(null);
            }

            var def = CurrentSchema.Settings.DefaultPrimaryKeyAttribute;

            Type type = GetValueType(primaryKey);

            List <string> parts = new List <string>();

            if (primaryKey.Name != def.Name)
            {
                parts.Add("Name = \"" + primaryKey.Name + "\"");
            }

            if (primaryKey.Identity != def.Identity)
            {
                parts.Add("Identity = " + primaryKey.Identity.ToString().ToLower());
                parts.Add("IdentityBehaviour = " + primaryKey.Identity.ToString().ToLower());
            }

            parts.AddRange(GetSqlDbTypeParts(primaryKey, type));

            if (type != def.Type || parts.Any())
            {
                parts.Insert(0, "typeof(" + type.TypeName() + ")");
            }

            if (parts.Any())
            {
                return("PrimaryKey(" + parts.ToString(", ") + ")");
            }

            return(null);
        }
Пример #6
0
        protected virtual string?GetStringLengthValidator(DiffTable table, DiffColumn col, string?relatedEntity)
        {
            if (GetValueType(col) != typeof(string))
            {
                return(null);
            }

            var parts = new List <string>();

            var min = GetMinStringLength(col);

            if (min != null)
            {
                parts.Add("Min = " + min);
            }

            if (col.Length != -1)
            {
                parts.Add("Max = " + col.Length);
            }

            return("StringLengthValidator(" + parts.ToString(", ") + ")");
        }
        protected virtual IEnumerable<string> GetFieldAttributes(DiffTable table, DiffColumn col, string relatedEntity)
        {
            List<string> attributes = new List<string>();

            if (HasNotNullableAttribute(col, relatedEntity))
                attributes.Add("NotNullable");

            if (col.ForeignKey == null)
            {
                string sqlDbType = GetSqlTypeAttribute(table, col);

                if (sqlDbType != null)
                    attributes.Add(sqlDbType);
            }

            if (GetEmbeddedField(table, col) != null || col.Name != DefaultColumnName(table, col))
                attributes.Add("ColumnName(\"" + col.Name + "\")");

            if (HasUniqueIndex(table, col))
                attributes.Add("UniqueIndex");

            return attributes;
        }
Пример #8
0
        protected virtual MListInfo GetMListInfo(DiffTable table)
        {
            if (this.InverseGraph.RelatedTo(table).Any())
            {
                return(null);
            }

            var parentColumn = GetMListParentColumn(table);

            if (parentColumn == null)
            {
                return(null);
            }

            var orderColumn   = GetMListOrderColumn(table);
            var trivialColumn = GetMListTrivialElementColumn(table, parentColumn, orderColumn);

            return(new MListInfo(parentColumn)
            {
                TrivialElementColumn = trivialColumn,
                PreserveOrderColumn = orderColumn,
            });
        }
 protected virtual string GetEnumDescription(DiffTable table, DataRow item)
 {
     throw new NotImplementedException("Override GetEnumDescription");
 }
Пример #10
0
        protected virtual string WriteOperations(DiffTable table)
        {
            var kind = GetEntityKind(table);
            if (!(kind == EntityKind.Main || kind == EntityKind.Shared || kind == EntityKind.String))
                return null;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("[AutoInit]");
            sb.AppendLine("public static class {0}".FormatWith(GetOperationName(table.Name)));
            sb.AppendLine("{");
            sb.AppendLine("    public static readonly ExecuteSymbol<{0}> Save;".FormatWith(GetEntityName(table.Name)));
            sb.AppendLine("}");
            return sb.ToString();
        }
Пример #11
0
 protected virtual DiffColumn GetMListOrderColumn(DiffTable table)
 {
     return(table.Columns.TryGetC("Order") ?? table.Columns.TryGetC("Row") ?? table.Columns.TryGetC("Index"));
 }
Пример #12
0
 protected virtual bool IsEnum(DiffTable objectName)
 {
     return(false);
 }
Пример #13
0
 protected virtual string GetEmbeddedField(DiffTable table, DiffColumn col)
 {
     return(null);
 }
Пример #14
0
 protected virtual EntityData GetEntityData(DiffTable table)
 {
     return EntityData.Transactional;
 }
Пример #15
0
 protected virtual DiffColumn GetPrimaryKeyColumn(DiffTable table)
 {
     return table.Columns.Values.SingleOrDefaultEx(a => a.PrimaryKey);
 }
Пример #16
0
        protected virtual string GetPrimaryKeyAttribute(DiffTable table)
        {
            DiffColumn primaryKey = GetPrimaryKeyColumn(table);

            if (primaryKey == null)
                return null;

            var def = CurrentSchema.Settings.DefaultPrimaryKeyAttribute;
            
            Type type = GetValueType(primaryKey);

            List<string> parts = new List<string>();
          
            if (primaryKey.Name != def.Name)
                parts.Add("Name = \"" + primaryKey.Name + "\"");

            if (primaryKey.Identity != def.Identity)
            {
                parts.Add("Identity = " + primaryKey.Identity.ToString().ToLower());
                parts.Add("IdentityBehaviour = " + primaryKey.Identity.ToString().ToLower());
            }

            parts.AddRange(GetSqlDbTypeParts(primaryKey, type));

            if (type != def.Type || parts.Any())
                parts.Insert(0, "typeof(" + type.TypeName() + ")");

            if(parts.Any())
                return "PrimaryKey(" + parts.ToString(", ") + ")";

            return null;
        }
Пример #17
0
 protected virtual string GetTicksColumnAttribute(DiffTable table)
 {
     return "TicksColumn(Default = \"0\")";
 }
Пример #18
0
        protected virtual IEnumerable<string> GetEntityAttributes(DiffTable table)
        {
            List<string> atts = new List<string> { "Serializable" };

            atts.Add("EntityKind(EntityKind." + GetEntityKind(table) + ", EntityData." + GetEntityData(table) + ")");

            string tableNameAttribute = GetTableNameAttribute(table.Name, null);
            if (tableNameAttribute != null)
                atts.Add(tableNameAttribute);

            string primaryKeyAttribute = GetPrimaryKeyAttribute(table);
            if (primaryKeyAttribute != null)
                atts.Add(primaryKeyAttribute);

            string ticksColumnAttribute = GetTicksColumnAttribute(table);
            if (ticksColumnAttribute != null)
                atts.Add(ticksColumnAttribute);

            return atts;
        }
Пример #19
0
 protected virtual MListInfo GetMListInfo(DiffTable table)
 {
     return null;
 }
        protected virtual string GetFieldMListName(DiffTable table, DiffTable relatedTable, MListInfo mListInfo)
        {
            ObjectName name = mListInfo.TrivialElementColumn?.ForeignKey.TargetTable ?? relatedTable.Name;

            return NaturalLanguageTools.Pluralize(GetEntityName(name).RemoveSuffix("Entity")).FirstLower();
        }
Пример #21
0
 protected virtual DiffColumn GetToStringColumn(DiffTable table)
 {
     return(table.Columns.TryGetC("Name") ?? table.Columns.Values.FirstOrDefault(a => a.PrimaryKey));
 }
Пример #22
0
 protected virtual EntityKind GetEntityKind(DiffTable table)
 {
     return EntityKind.Main;
 } 
Пример #23
0
 protected virtual int GetEnumId(DiffTable table, DataRow row)
 {
     throw new NotImplementedException("Override GetEnumId");
 }
Пример #24
0
        protected virtual string WriteField(string fileName, DiffTable table, DiffColumn col)
        {
            string relatedEntity = GetRelatedEntity(table, col);

            string type = GetFieldType(table, col, relatedEntity);

            string fieldName = GetFieldName(table, col);

            StringBuilder sb = new StringBuilder();

            WriteAttributeTag(sb, GetFieldAttributes(table, col, relatedEntity));
            WriteAttributeTag(sb, GetPropertyAttributes(table, col, relatedEntity));
            sb.AppendLine("public {0} {1} { get; {2}set; }".FormatWith(type, fieldName.FirstUpper(), IsReadonly(table, col) ? "private" : null));

            return sb.ToString();
        }
Пример #25
0
        protected virtual string GetRelatedEntity(DiffTable table, DiffColumn col)
        {
            if (col.ForeignKey == null)
                return null;

            return GetEntityName(col.ForeignKey.TargetTable);
        }
Пример #26
0
 protected virtual bool IsReadonly(DiffTable table, DiffColumn col)
 {
     return false;
 }
Пример #27
0
 protected virtual string GetTicksColumnAttribute(DiffTable table)
 {
     return("TicksColumn(Default = \"0\")");
 }
Пример #28
0
        protected virtual IEnumerable<string> GetPropertyAttributes(DiffTable table, DiffColumn col, string relatedEntity)
        {
            List<string> attributes = new List<string>();

            if (HasNotNullableAttribute(col, relatedEntity) && GetValueType(col) != typeof(string))
                attributes.Add("NotNullValidator");

            string stringLengthValidator = GetStringLengthValidator(table, col, relatedEntity);
            if(stringLengthValidator != null)
                attributes.Add(stringLengthValidator);

            return attributes;
        }
Пример #29
0
 protected virtual int GetEnumId(DiffTable table, DataRow row)
 {
     throw new NotImplementedException("Override GetEnumId");
 }
Пример #30
0
        protected virtual string GetStringLengthValidator(DiffTable table, DiffColumn col, string relatedEntity)
        {
            if (GetValueType(col) != typeof(string))
                return null;

            var parts = new List<string>();

            parts.Add("AllowNulls = " + col.Nullable.ToString().ToLower());

            var min = GetMinStringLength(col);
            if (min != null)
                parts.Add("Min = " + min);

            if (col.Length != -1)
                parts.Add("Max = " + col.Length / DiffColumn.BytesPerChar(col.SqlDbType));

            return "StringLengthValidator(" + parts.ToString(", ") + ")";
        }
Пример #31
0
 protected virtual DiffColumn GetToStringColumn(DiffTable table)
 {
     return table.Columns.TryGetC("Name") ?? table.Columns.Values.FirstOrDefault(a => a.PrimaryKey);
 }
Пример #32
0
        protected virtual string GetFieldName(DiffTable table, DiffColumn col)
        {
            string name = col.Name.Contains(' ') ? col.Name.ToPascal(false) : col.Name;

            if (this.GetRelatedEntity(table, col) != null)
            {
                if (name.Length > 2 && name.EndsWith("Id", StringComparison.InvariantCultureIgnoreCase))
                    name = name.RemoveEnd("Id".Length);

                if (name.Length > 2 && name.StartsWith("Id", StringComparison.InvariantCultureIgnoreCase))
                    name = name.RemoveStart("Id".Length);
            }

            return name.FirstLower();
        }
 protected virtual MListInfo GetMListInfo(DiffTable table)
 {
     return null;
 }
Пример #34
0
        protected virtual IEnumerable<string> GetFieldAttributes(DiffTable table, DiffColumn col, string relatedEntity)
        {
            List<string> attributes = new List<string>();

            if (HasNotNullableAttribute(col, relatedEntity))
                attributes.Add("NotNullable");

            if (col.ForeignKey == null)
            {
                string sqlDbType = GetSqlTypeAttribute(table, col);

                if (sqlDbType != null)
                    attributes.Add(sqlDbType);
            }

            if (GetEmbeddedField(table, col) != null || col.Name != DefaultColumnName(table, col))
                attributes.Add("ColumnName(\"" + col.Name + "\")");

            if (HasUniqueIndex(table, col))
                attributes.Add("UniqueIndex");

            return attributes;
        }
 protected virtual bool HasUniqueIndex(DiffTable table, DiffColumn col)
 {
     return table.Indices.Values.Any(a => a.FilterDefinition == null && a.Columns.Only() == col.Name && a.IsUnique && a.Type == DiffIndexType.NonClustered);
 }
Пример #36
0
 protected virtual bool HasUniqueIndex(DiffTable table, DiffColumn col)
 {
     return table.Indices.Values.Any(a => a.FilterDefinition == null && a.Columns.Only() == col.Name && a.IsUnique && a.Type == DiffIndexType.NonClustered);
 }
Пример #37
0
 protected virtual string GetFieldMListName(DiffTable table, DiffTable relatedTable, MListInfo mListInfo)
 {
     return(NaturalLanguageTools.Pluralize(relatedTable.Name.Name.RemovePrefix(table.Name.Name)));
 }
Пример #38
0
        protected virtual string DefaultColumnName(DiffTable table, DiffColumn col)
        {
            string fieldName = GetFieldName(table, col).FirstUpper();

            if (col.ForeignKey == null)
                return fieldName;

            return fieldName + "ID";
        }
Пример #39
0
        protected virtual string WriteEntity(string fileName, DiffTable table)
        {
            var name = GetEntityName(table);

            StringBuilder sb = new StringBuilder();

            WriteAttributeTag(sb, GetEntityAttributes(table));
            sb.AppendLine("public class {0} : {1}".FormatWith(name, GetEntityBaseClass(table.Name)));
            sb.AppendLine("{");

            string multiColumnIndexComment = WriteMultiColumnIndexComment(table, name);

            if (multiColumnIndexComment != null)
            {
                sb.Append(multiColumnIndexComment.Indent(4));
                sb.AppendLine();
            }

            var primaryKey = GetPrimaryKeyColumn(table);

            var columnGroups = (from col in table.Columns.Values
                                where col != primaryKey
                                group col by GetEmbeddedField(table, col) into g
                                select g).ToList();

            foreach (var col in columnGroups.SingleOrDefaultEx(g => g.Key == null).EmptyIfNull())
            {
                string field = WriteField(fileName, table, col);

                if (field != null)
                {
                    sb.Append(field.Indent(4));
                    sb.AppendLine();
                }
            }

            foreach (var gr in columnGroups.Where(g => g.Key != null))
            {
                string embeddedField = WriteEmbeddedField(table, gr.Key);

                if (embeddedField != null)
                {
                    sb.AppendLine(embeddedField.Indent(4));
                    sb.AppendLine();
                }
            }

            foreach (KeyValuePair <DiffTable, MListInfo> kvp in GetMListFields(table))
            {
                string field = WriteFieldMList(fileName, table, kvp.Value, kvp.Key);

                if (field != null)
                {
                    sb.AppendLine(field.Indent(4));
                    sb.AppendLine();
                }
            }

            string toString = WriteToString(table);

            if (toString != null)
            {
                sb.Append(toString.Indent(4));
                sb.AppendLine();
            }

            sb.AppendLine("}");
            sb.AppendLine();

            foreach (var gr in columnGroups.Where(g => g.Key != null))
            {
                string embeddedEntity = WriteEmbeddedEntity(fileName, table, GetEmbeddedTypeName(gr.Key), gr.ToList());
                if (embeddedEntity != null)
                {
                    sb.AppendLine(embeddedEntity);
                    sb.AppendLine();
                }
            }

            string operations = WriteOperations(table);

            if (operations != null)
            {
                sb.Append(operations);
            }

            return(sb.ToString());
        }
Пример #40
0
        protected virtual string GetSqlTypeAttribute(DiffTable table, DiffColumn col)
        {
            Type type = GetValueType(col);
            List<string> parts = GetSqlDbTypeParts(col, type);

            if (parts.Any())
                return "SqlDbType(" + parts.ToString(", ") + ")";

            return null;
        }
Пример #41
0
 protected virtual IEnumerable <KeyValuePair <DiffTable, MListInfo> > GetMListFields(DiffTable table)
 {
     return(from relatedTable in InverseGraph.RelatedTo(table)
            let mListInfo2 = GetMListInfo(relatedTable)
                             where mListInfo2 != null && mListInfo2.BackReferenceColumn.ForeignKey.TargetTable.Equals(table.Name)
                             select KVP.Create(relatedTable, mListInfo2));
 }
Пример #42
0
        protected virtual string GetFieldType(DiffTable table, DiffColumn col, string relatedEntity)
        {
            if (relatedEntity != null)
            {
                if (IsEnum(col.ForeignKey.TargetTable))
                    return col.Nullable ? relatedEntity + "?" : relatedEntity;

                return IsLite(table, col) ? "Lite<" + relatedEntity + ">" : relatedEntity;
            }

            var valueType = GetValueType(col);

            if (col.Nullable)
                return valueType.Nullify().TypeName();

            return valueType.TypeName();
        }
Пример #43
0
 protected virtual string GetEnumDescription(DiffTable table, DataRow item)
 {
     throw new NotImplementedException("Override GetEnumDescription");
 }
Пример #44
0
 protected virtual bool IsLite(DiffTable table, DiffColumn col)
 {
     return true;
 }
Пример #45
0
 protected virtual string GetOperationName(DiffTable objectName)
 {
     return(GetEntityName(objectName).RemoveSuffix("Entity") + "Operation");
 }
Пример #46
0
        protected virtual string WriteEmbeddedField(DiffTable table, string fieldName)
        {
            StringBuilder sb = new StringBuilder();

            fieldName = fieldName.FirstLower();
            string propertyName = fieldName.FirstUpper();
            string typeName = GetEmbeddedTypeName(fieldName);

            sb.AppendLine("[NotNullable]");
            sb.AppendLine("[NotNullValidator]");
            sb.AppendLine("public {0} {1} { get; set; }".FormatWith(typeName, fieldName.FirstUpper()));

            return sb.ToString();
        }
Пример #47
0
 protected virtual DiffColumn GetMListTrivialElementColumn(DiffTable table, DiffColumn parentColumn, DiffColumn orderColumn)
 {
     return(table.Columns.Values.Where(c => c != parentColumn && c != orderColumn && !c.PrimaryKey).Only());
 }
Пример #48
0
 protected virtual DiffColumn GetPrimaryKeyColumn(DiffTable table)
 {
     return(table.Columns.Values.SingleOrDefaultEx(a => a.PrimaryKey));
 }
Пример #49
0
 protected virtual DiffColumn GetMListParentColumn(DiffTable table)
 {
     return(table.Columns.Values.Where(c => c.ForeignKey != null && c.Nullable == false && table.Name.Name.StartsWith(c.ForeignKey.TargetTable.Name)).OrderByDescending(a => a.ForeignKey.TargetTable.Name.Length).FirstOrDefault());
 }
Пример #50
0
 protected virtual EntityKind GetEntityKind(DiffTable table)
 {
     return(EntityKind.Main);
 }
Пример #51
0
        protected virtual string WriteFieldMList(string fileName, DiffTable table, MListInfo mListInfo, DiffTable relatedTable)
        {
            string type;
            List<string> fieldAttributes;
            if(mListInfo.TrivialElementColumn == null )
            {
                type = GetEntityName(relatedTable.Name);
                fieldAttributes = new List<string> { "NotNullable" };
            }
            else
            {
                string relatedEntity = GetRelatedEntity(relatedTable, mListInfo.TrivialElementColumn);
                type = GetFieldType(relatedTable, mListInfo.TrivialElementColumn, relatedEntity);

                fieldAttributes = GetFieldAttributes(relatedTable, mListInfo.TrivialElementColumn, relatedEntity).ToList(); 
            }

            var preserveOrder = GetPreserveOrderAttribute(mListInfo);
            if (preserveOrder != null)
                fieldAttributes.Add(preserveOrder);
       
            string primaryKey = GetPrimaryKeyAttribute(relatedTable);
            if (primaryKey != null)
                fieldAttributes.Add(primaryKey);

            string tableName = GetTableNameAttribute(relatedTable.Name, mListInfo);
            if (tableName != null)
                fieldAttributes.Add(tableName);

            string backColumn = GetBackColumnNameAttribute(mListInfo.BackReferenceColumn);
            if (backColumn != null)
                fieldAttributes.AddRange(backColumn);

            StringBuilder sb = new StringBuilder();

            string fieldName = GetFieldMListName(table, relatedTable, mListInfo);
            WriteAttributeTag(sb, fieldAttributes);
            sb.AppendLine("[NotNullValidator, NoRepeatValidator]");
            sb.AppendLine("public MList<{0}> {1} { get; set; } = new MList<{0}>();".FormatWith(type, fieldName.FirstUpper()));

            return sb.ToString();
        }
Пример #52
0
        protected virtual string WriteMultiColumnIndexComment(DiffTable table, string name, IEnumerable<DiffColumn> columns)
        {
            var columnNames = columns.Select(c=>c.Name).ToHashSet();
            StringBuilder sb = new StringBuilder();
            foreach (var ix in table.Indices.Values.Where(a => a.Columns.Count > 1 || a.FilterDefinition.HasText())
                .Where(ix => ix.Columns.Intersect(columnNames).Any()))
            {
                sb.AppendLine("//Add to Logic class");
                sb.AppendLine("//sb.AddUniqueIndex<{0}>(e => new {{ {1} }}{2});".FormatWith(name,
                    ix.Columns.ToString(c => "e." + GetFieldName(table, table.Columns.GetOrThrow(c)).FirstUpper(), ", "),
                    ix.FilterDefinition == null ? null : ", " + ix.FilterDefinition));
            }

            return sb.ToString().DefaultText(null);
        }
Пример #53
0
 protected virtual EntityData GetEntityData(DiffTable table)
 {
     return(EntityData.Transactional);
 }
Пример #54
0
 protected virtual bool NotNullAttributeNecessary(DiffTable table, DiffColumn col, bool isMList)
 {
     return(false); //NotNullValidator is enought
 }
Пример #55
0
 protected virtual bool IsReadonly(DiffTable table, DiffColumn col)
 {
     return(false);
 }
Пример #56
0
 protected virtual bool IsLite(DiffTable table, DiffColumn col)
 {
     return(true);
 }
Пример #57
0
 protected virtual bool RequiresColumnName(DiffTable table, DiffColumn col)
 {
     return(GetEmbeddedField(table, col) != null || col.Name != DefaultColumnName(table, col));
 }
Пример #58
0
        protected virtual string GetFieldMListName(DiffTable table, DiffTable relatedTable, MListInfo mListInfo)
        {
            ObjectName name = mListInfo.TrivialElementColumn?.ForeignKey.TargetTable ?? relatedTable.Name;

            return NaturalLanguageTools.Pluralize(GetEntityName(name).RemoveSuffix("Entity")).FirstLower();
        }
Пример #59
0
        protected virtual string WriteFieldMList(string fileName, DiffTable table, MListInfo mListInfo, DiffTable relatedTable)
        {
            string        type;
            List <string> fieldAttributes;

            if (mListInfo.TrivialElementColumn == null)
            {
                type            = GetEntityName(relatedTable);
                fieldAttributes = new List <string> {
                    "NotNullable"
                };
            }
            else
            {
                string relatedEntity = GetRelatedEntity(relatedTable, mListInfo.TrivialElementColumn);
                type = GetFieldType(relatedTable, mListInfo.TrivialElementColumn, relatedEntity);

                fieldAttributes = GetFieldAttributes(relatedTable, mListInfo.TrivialElementColumn, relatedEntity, isMList: true).ToList();
            }

            var preserveOrder = GetPreserveOrderAttribute(mListInfo);

            if (preserveOrder != null)
            {
                fieldAttributes.Add(preserveOrder);
            }

            string primaryKey = GetPrimaryKeyAttribute(relatedTable);

            if (primaryKey != null)
            {
                fieldAttributes.Add(primaryKey);
            }

            string tableName = GetTableNameAttribute(relatedTable.Name, mListInfo);

            if (tableName != null)
            {
                fieldAttributes.Add(tableName);
            }

            string backColumn = GetBackColumnNameAttribute(mListInfo.BackReferenceColumn);

            if (backColumn != null)
            {
                fieldAttributes.AddRange(backColumn);
            }

            StringBuilder sb = new StringBuilder();

            string fieldName = GetFieldMListName(table, relatedTable, mListInfo);

            WriteAttributeTag(sb, fieldAttributes);
            sb.AppendLine("[NotNullValidator, NoRepeatValidator]");
            sb.AppendLine("public MList<{0}> {1} {{ get; set; }} = new MList<{0}>();".FormatWith(type, fieldName.FirstUpper()));

            return(sb.ToString());
        }
Пример #60
0
        protected virtual string WriteToString(DiffTable table)
        {
            var toStringColumn = GetToStringColumn(table);
            if (toStringColumn == null)
                return null;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("static Expression<Func<{0}, string>> ToStringExpression = e => e.{1}{2};".FormatWith(GetEntityName(table.Name),
                toStringColumn.PrimaryKey ? "Id" : GetFieldName(table, toStringColumn).FirstUpper(),
                toStringColumn.PrimaryKey || GetFieldType(table, toStringColumn, GetRelatedEntity(table, toStringColumn)) != "string" ? "?.ToString()" : ""));
            sb.AppendLine("[ExpressionField]");
            sb.AppendLine("public override string ToString()");
            sb.AppendLine("{");
            sb.AppendLine("    return ToStringExpression.Evaluate(this);");
            sb.AppendLine("}");
            return sb.ToString();
        }