sql >> Database >  >> RDS >> Mysql

SubSonic 3 en MySQL, het verwijderen van onderstrepingstekens uit de kolomnaam in de CleanUp()-methode veroorzaakt uitzonderingen bij het gebruik van een eigenschap in linq-query

Gedurende vele maanden was dit een probleem voor mij en ik vermeed gewoon onderstrepingstekens bij het werken met SubSonic op een ondersteunde DB. Tot gisteren, toen ik een verouderd project moest ondersteunen met onderstrepingen in de SQL Server-database.

Je moet het oplossen in de broncode van SubSonic.Core (bestand:SubSonic.Core\Schema\DatabaseTable.cs):

Zoek deze methode:

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

En verander het in:

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

Vervolgens moet je je Structs.tt . aanpassen :

Vind dit bovenaan:

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

En voeg deze regel toe:

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

Zodat het wordt:

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

Het probleem is dat zodra u de kolomnamen heeft opgeschoond, SubSonic probeert de geldige kolommen in uw zoekopdracht te vinden door uw door SubSonic gegenereerde eigenschapsnamen te matchen. tegen de originele kolomnamen . van de database .

Deze wijzigingen zorgen ervoor dat SubSonic ze vergelijkt met de opgeschoonde eigenschapsnaam .




  1. Android aangepaste agenda en herinnering

  2. Entity Framework core - Bevat is hoofdlettergevoelig of niet hoofdlettergevoelig?

  3. Wat is een databank? Definitie, typen en componenten

  4. INSERT INTO met exec met meerdere resultatensets