sql >> Database teknologi >  >> RDS >> Mysql

SubSonic 3 og MySQL, fjernelse af understregning fra kolonnenavn i CleanUp()-metoden forårsager undtagelser ved brug af egenskab i linq-query

I mange mange måneder var dette et problem for mig, og jeg undgik bare understregninger, når jeg arbejdede med SubSonic på enhver understøttet DB. Indtil i går, hvor jeg skulle støtte et legacy projekt, der havde understregninger i sin SQL Server-database.

Du bliver nødt til at rette det i kildekoden til SubSonic.Core (fil:SubSonic.Core\Schema\DatabaseTable.cs):

Find denne metode:

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

Og skift det til:

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

Dernæst skal du ændre dine Structs.tt :

Find denne nær toppen:

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

Og tilføj denne linje:

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

Så det bliver:

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

Problemet er, at når du har ryddet op i kolonnenavnene, forsøger SubSonic at finde de gyldige kolonner i din forespørgsel ved at matche dine SubSonic-genererede ejendomsnavne mod databasens originale kolonnenavne .

Disse ændringer vil sikre, at SubSonic matcher dem med det rensede ejendomsnavn .




  1. Mysql event fejl ved hjælp af php

  2. Forskellige tidszone_typer på DateTime-objekt

  3. Sådan opretter du en MySQL-database ved hjælp af cPanel API

  4. Sådan fungerer COMPRESS() i MariaDB