Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SubSonic 3 e MySQL, remover sublinhado do nome da coluna no método CleanUp() causa exceções ao usar a propriedade na consulta linq


Por muitos e muitos meses isso foi um problema para mim e eu apenas evitei sublinhados ao trabalhar com SubSonic em qualquer banco de dados suportado. Até ontem quando tive que dar suporte a um projeto legado que tinha sublinhados em seu banco de dados SQL Server.

Você terá que corrigi-lo dentro do código-fonte do SubSonic.Core (arquivo:SubSonic.Core\Schema\DatabaseTable.cs):

Encontre este método:
public IColumn GetColumnByPropertyName(string PropertyName)
{
    return Columns.SingleOrDefault(x => x.Name.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
}

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

Em seguida, você terá que modificar seu Structs.tt :

Encontre isso perto do topo:
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#>
});

E adicione esta linha:
    PropertyName = "<#=col.CleanName#>",

Para que fique:
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#>
});

O problema é que, depois de limpar os nomes das colunas, o SubSonic tenta encontrar as colunas válidas em sua consulta, correspondendo aos nomes de propriedade gerados pelo SubSonic contra os nomes de coluna originais do banco de dados .

Essas alterações garantirão que o SubSonic as corresponda ao nome da propriedade limpo .