sql >> Databáze >  >> RDS >> Mysql

SubSonic 3 a MySQL, odstranění podtržítka z názvu sloupce v metodě CleanUp() způsobí výjimky při použití vlastnosti v linq-query

Po mnoho měsíců to pro mě byl problém a při práci se SubSonic na jakékoli podporované databázi jsem se vyhýbal podtržení. Až do včerejška, kdy jsem musel podporovat starší projekt, který měl ve své databázi SQL Server podtržítka.

Budete to muset opravit ve zdrojovém kódu SubSonic.Core (soubor:SubSonic.Core\Schema\DatabaseTable.cs):

Najděte tuto metodu:

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

A změňte jej na:

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

Dále budete muset upravit svůj Structs.tt :

Najděte toto nahoře:

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#>
});

A přidejte tento řádek:

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

Aby se to stalo:

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#>
});

Problém je v tom, že jakmile vyčistíte názvy sloupců, SubSonic se pokusí najít platné sloupce ve vašem dotazu porovnáním názvů vlastností generovaných SubSonic proti původním názvům sloupců databáze .

Tyto změny zajistí, že je SubSonic porovná s vyčištěným názvem vlastnosti .




  1. Jak mohu určit nainstalované instance SQL Server a jejich verze?

  2. Django Multiple Databases Fallback to Master, pokud Slave nefunguje

  3. Jak spojit tři stoly podle laravelova výmluvného modelu

  4. Aktualizované možnosti úrovně databáze SQL Azure