Selama berbulan-bulan ini adalah masalah bagi saya dan saya hanya menghindari garis bawah ketika bekerja dengan SubSonic pada DB apa pun yang didukung. Sampai kemarin ketika saya harus mendukung proyek warisan yang memiliki garis bawah di database SQL Server-nya.
Anda harus memperbaikinya dalam kode sumber SubSonic.Core (file:SubSonic.Core\Schema\DatabaseTable.cs):
Temukan metode ini:
public IColumn GetColumnByPropertyName(string PropertyName)
{
return Columns.SingleOrDefault(x => x.Name.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
}
Dan ubah menjadi:
public IColumn GetColumnByPropertyName(string PropertyName)
{
return Columns.SingleOrDefault(x => x.PropertyName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
}
Selanjutnya Anda harus memodifikasi Structs.tt :
Temukan ini di dekat bagian atas:
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#>
});
Dan tambahkan baris ini:
PropertyName = "<#=col.CleanName#>",
Sehingga menjadi:
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#>
});
Masalahnya adalah setelah Anda membersihkan nama kolom, SubSonic mencoba menemukan kolom yang valid dalam kueri Anda dengan mencocokkan nama properti yang dihasilkan SubSonic. terhadap nama kolom asli database .
Perubahan ini akan memastikan bahwa SubSonic mencocokkannya dengan nama properti . yang telah dibersihkan .