Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SubSonic 3 và MySQL, xóa dấu gạch dưới khỏi tên cột trong phương thức CleanUp () gây ra ngoại lệ khi sử dụng thuộc tính trong truy vấn linq

Trong nhiều tháng, đây là một vấn đề đối với tôi và tôi chỉ tránh dấu gạch dưới khi làm việc với SubSonic trên bất kỳ DB nào được hỗ trợ. Cho đến ngày hôm qua khi tôi phải hỗ trợ một dự án kế thừa có dấu gạch dưới trong cơ sở dữ liệu SQL Server của nó.

Bạn sẽ phải sửa nó trong mã nguồn của SubSonic.Core (tệp:SubSonic.Core \ Schema \ DatabaseTable.cs):

Tìm phương pháp này:

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

Và thay đổi nó thành:

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

Tiếp theo, bạn sẽ phải sửa đổi Structs.tt :

Tìm cái này ở gần đầu:

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

Và thêm dòng này:

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

Vì vậy, nó trở thành:

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

Vấn đề là sau khi bạn xóa tên cột, SubSonic sẽ thử tìm các cột hợp lệ trong truy vấn của bạn bằng cách khớp với tên thuộc tính do SubSonic tạo của bạn. chống lại tên cột ban đầu của cơ sở dữ liệu .

Những thay đổi này sẽ đảm bảo rằng SubSonic khớp chúng với tên thuộc tính đã được làm sạch .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách viết nhiều cột trong mệnh đề với sqlalchemy

  2. tính toán trung bình không có số thập phân

  3. Java kết nối với Cloud SQL thế hệ thứ 2 từ Appengine Managed VM

  4. MySQL:Làm cách nào để lấy dấu thời gian của lần chèn cuối cùng vào cơ sở dữ liệu

  5. Chọn hồ sơ từ NOW () -1 Ngày