Mysql
 sql >> база данни >  >> RDS >> Mysql

SubSonic 3 и MySQL, премахването на долно черта от името на колона в метода CleanUp() причинява изключения при използване на свойство в linq-query

В продължение на много месеци това беше проблем за мен и аз просто избягвах долните черти, когато работех с SubSonic на всяка поддържана DB. До вчера, когато трябваше да поддържам наследен проект, който имаше долни черти в базата данни на SQL Server.

Ще трябва да го поправите в изходния код на SubSonic.Core (файл:SubSonic.Core\Schema\DatabaseTable.cs):

Намерете този метод:

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

И го променете на:

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

След това ще трябва да промените своя Structs.tt :

Намерете това в горната част:

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

И добавете този ред:

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

Така че да стане:

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

Проблемът е, че след като изчистите имената на колоните, SubSonic се опитва да намери валидните колони във вашата заявка, като съпоставя вашите генерирани от SubSonic имена на свойства срещу оригиналните имена на колони на базата данни .

Тези промени ще гарантират, че SubSonic ги съпоставя с изчистеното име на собственост .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Брой пула за MySQL връзки

  2. Mysql 5.5.10 - Mac 10.6.x - автоматично стартиране

  3. Синтаксис на SQL SELECT – Изброен от СУБД

  4. Грешка в Mysql:Потребителят, посочен като дефинер ('mysql.infoschema'@'localhost'), не съществува', когато се опитва да изхвърли пространства за таблици

  5. Как да премахнете стойността по подразбиране на колоната в MySQL