Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SubSonic 3 i MySQL, usunięcie podkreślenia z nazwy kolumny w metodzie CleanUp() powoduje wyjątki podczas używania właściwości w linq-query

Przez wiele miesięcy stanowiło to dla mnie problem i po prostu unikałem podkreśleń podczas pracy z SubSonic na dowolnym obsługiwanym DB. Aż do wczoraj, kiedy musiałem wspierać przestarzały projekt, który miał podkreślenia w bazie danych SQL Server.

Musisz to naprawić w kodzie źródłowym SubSonic.Core (plik:SubSonic.Core\Schema\DatabaseTable.cs):

Znajdź tę metodę:

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

I zmień go na:

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

Następnie musisz zmodyfikować swój Structs.tt :

Znajdź to u góry:

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

I dodaj ten wiersz:

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

Tak, że staje się:

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

Problem polega na tym, że po wyczyszczeniu nazw kolumn SubSonic próbuje znaleźć prawidłowe kolumny w zapytaniu, dopasowując wygenerowane przez SubSonic nazwy właściwości w stosunku do oryginalnych nazw kolumn w bazie danych .

Dzięki tym zmianom SubSonic dopasuje je do oczyszczonej nazwy właściwości .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Losowa kolejność z Entity Framework i MySQL

  2. Licznik anulowania instrukcji MySQL nie został zatrzymany

  3. Odejmowanie jednego wiersza danych od drugiego w SQL

  4. Problem z zasięgiem MySql ze skorelowanymi podzapytaniami

  5. Eksportuj bazę danych MySQL za pomocą PHP