sql >> Databasteknik >  >> RDS >> Mysql

SubSonic 3 och MySQL, att ta bort understreck från kolumnnamnet i metoden CleanUp() orsakar undantag när egenskapen används i linq-query

Under många månader var detta ett problem för mig och jag undvek bara understreck när jag arbetade med SubSonic på någon DB som stöds. Tills igår när jag var tvungen att stödja ett äldre projekt som hade understreck i sin SQL Server-databas.

Du måste fixa det i källkoden för SubSonic.Core (fil:SubSonic.Core\Schema\DatabaseTable.cs):

Hitta den här metoden:

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

Och ändra det till:

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

Därefter måste du ändra dina Structs.tt :

Hitta det här nära 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#>
});

Och lägg till den här raden:

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

Så att det blir:

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 är att när du har rensat upp kolumnnamnen försöker SubSonic hitta de giltiga kolumnerna i din fråga genom att matcha dina SubSonic-genererade egendomsnamn mot databasens ursprungliga kolumnnamn .

Dessa ändringar kommer att se till att SubSonic matchar dem mot det rensade egendomsnamnet .




  1. Postgres:kontrollera om arrayfältet innehåller värde?

  2. SQLiteException:okänd databas

  3. Zend_Db:Hur ansluter man till en MySQL-databas över SSH-tunneln?

  4. Kontrollera statusen för alla databaspostmeddelanden i SQL Server (T-SQL)