sql >> Base de Datos >  >> RDS >> Mysql

SubSonic 3 y MySQL, la eliminación del guión bajo del nombre de la columna en el método CleanUp () provoca excepciones al usar la propiedad en linq-query

Durante muchos meses, esto fue un problema para mí y simplemente evitaba los guiones bajos cuando trabajaba con SubSonic en cualquier base de datos compatible. Hasta ayer cuando tuve que dar soporte a un proyecto heredado que tenía guiones bajos en su base de datos de SQL Server.

Deberá corregirlo dentro del código fuente de SubSonic.Core (archivo:SubSonic.Core\Schema\DatabaseTable.cs):

Encuentra este método:

public IColumn GetColumnByPropertyName(string PropertyName)
{
    return Columns.SingleOrDefault(x => x.Name.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
}

Y cámbialo a:

public IColumn GetColumnByPropertyName(string PropertyName)
{
    return Columns.SingleOrDefault(x => x.PropertyName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
}

A continuación, deberá modificar su Structs.tt :

Encuentra esto cerca de la parte superior:

Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
{
    IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
    DataType = DbType.<#=col.DbType.ToString()#>,
    IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
    AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
    IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>,
    MaxLength = <#=col.MaxLength#>
});

Y agrega esta línea:

    PropertyName = "<#=col.CleanName#>",

Para que se convierta en:

Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
{
    PropertyName = "<#=col.CleanName#>",
    IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
    DataType = DbType.<#=col.DbType.ToString()#>,
    IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
    AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
    IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>,
    MaxLength = <#=col.MaxLength#>
});

El problema es que una vez que limpió los nombres de las columnas, SubSonic intenta encontrar las columnas válidas en su consulta haciendo coincidir los nombres de propiedad generados por SubSonic. contra los nombres de columna originales de la base de datos .

Estos cambios asegurarán que SubSonic los compare con el nombre de propiedad limpio. .