Пример #1
0
        void ConvertSchema(string typeName)
        {
            var typeNames = new HashSet <string> {
                typeName
            };
            var contextMemberNames = new HashSet <string> {
                typeName
            };

            foreach (var table in _schema.Tables)
            {
                table.TypeName = GetName(typeNames, table.TypeName);

                {
                    var contextMemberName = table.TypeName;

                    if (!_cxInfo.DynamicSchemaOptions.NoPluralization)
                    {
                        contextMemberName = Pluralization.ToPlural(contextMemberName);
                    }

                    _contextMembers[table] = GetName(contextMemberNames, contextMemberName);
                }

                var classMemberNames = new HashSet <string> {
                    table.TypeName
                };

                foreach (var column in table.Columns)
                {
                    //Debug.WriteLine($"{table.TypeName}.{column.MemberName}");

                    column.MemberName = GetName(classMemberNames, column.MemberName);
                }

                foreach (var key in table.ForeignKeys)
                {
                    if (!_cxInfo.DynamicSchemaOptions.NoPluralization)
                    {
                        key.MemberName = key.AssociationType == AssociationType.OneToMany
                                                        ? Pluralization.ToPlural(key.MemberName)
                                                        : Pluralization.ToSingular(key.MemberName);
                    }

                    key.MemberName = GetName(classMemberNames, key.MemberName);
                }
            }

            foreach (var procedure in _schema.Procedures)
            {
                procedure.MemberName = GetName(typeNames, procedure.MemberName);

                if (procedure.ResultTable != null && !_contextMembers.ContainsKey(procedure.ResultTable))
                {
                    procedure.ResultTable.TypeName = GetName(typeNames, procedure.ResultTable.TypeName);

                    var classMemberNames = new HashSet <string> {
                        procedure.ResultTable.TypeName
                    };

                    foreach (var column in procedure.ResultTable.Columns)
                    {
                        var memberName = column.MemberName.IsNullOrWhiteSpace() ? "Column" : column.MemberName;
                        column.MemberName = GetName(classMemberNames, memberName);
                    }
                }
            }
        }
Пример #2
0
        void ConvertSchema(string typeName)
        {
            var typeNames = new HashSet <string> {
                typeName
            };
            var contextMemberNames = new HashSet <string> {
                typeName
            };

            foreach (var table in _schema.Tables)
            {
                table.TypeName = GetName(typeNames, table.TypeName);

                {
                    var contextMemberName = table.TypeName;

                    if (!_cxInfo.DynamicSchemaOptions.NoPluralization)
                    {
                        contextMemberName = Pluralization.ToPlural(contextMemberName);
                    }

                    _contextMembers[table] = GetName(contextMemberNames, contextMemberName);
                }

                var classMemberNames = new HashSet <string> {
                    table.TypeName
                };

                foreach (var column in table.Columns)
                {
                    //Debug.WriteLine($"{table.TypeName}.{column.MemberName}");

                    column.MemberName = GetName(classMemberNames, column.MemberName, !_cxInfo.DynamicSchemaOptions.NoCapitalization);
                }

                foreach (var key in table.ForeignKeys)
                {
                    if (!_cxInfo.DynamicSchemaOptions.NoPluralization)
                    {
                        key.MemberName = key.AssociationType == AssociationType.OneToMany
                                                        ? Pluralization.ToPlural(key.MemberName)
                                                        : Pluralization.ToSingular(key.MemberName);
                    }

                    key.MemberName = GetName(classMemberNames, key.MemberName);
                }
            }

            foreach (var procedure in _schema.Procedures)
            {
                // migrate https://github.com/linq2db/linq2db/pull/1905
                if (!procedure.IsFunction && ProviderName == LinqToDB.ProviderName.SqlServer)
                {
                    // sql server procedures always have integer return parameter
                    var name = "@returnValue";
                    var cnt  = 0;
                    while (procedure.Parameters.Any(_ => _.ParameterName == name))
                    {
                        name = $"@returnValue{cnt++}";
                    }

                    procedure.Parameters.Add(new ParameterSchema()
                    {
                        SchemaName           = name,
                        ParameterName        = name,
                        IsResult             = true,
                        DataType             = DataType.Int32,
                        SystemType           = typeof(int),
                        SchemaType           = "int",
                        ParameterType        = "int",
                        ProviderSpecificType = "int"
                    });
                }

                procedure.MemberName = GetName(typeNames, procedure.MemberName);

                if (procedure.ResultTable != null && !_contextMembers.ContainsKey(procedure.ResultTable))
                {
                    procedure.ResultTable.TypeName = GetName(typeNames, procedure.ResultTable.TypeName);

                    var classMemberNames = new HashSet <string> {
                        procedure.ResultTable.TypeName
                    };

                    foreach (var column in procedure.ResultTable.Columns)
                    {
                        var memberName = column.MemberName.IsNullOrWhiteSpace() ? "Column" : column.MemberName;
                        column.MemberName = GetName(classMemberNames, memberName);
                    }
                }

                foreach (var parameter in procedure.Parameters)
                {
                    parameter.ParameterName = ConvertToCompilable(parameter.ParameterName, false);
                }
            }
        }