Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SubSonic 3 और MySQL, क्लीनअप () विधि में कॉलम नाम से अंडरस्कोर को हटाकर linq-query में संपत्ति का उपयोग करते समय अपवाद का कारण बनता है

कई महीनों तक यह मेरे लिए एक मुद्दा था और किसी भी समर्थित डीबी पर सबसोनिक के साथ काम करते समय मैंने अंडरस्कोर से परहेज किया। कल तक जब मुझे एक विरासत परियोजना का समर्थन करना था जो अपने SQL सर्वर डेटाबेस में अंडरस्कोर था।

आपको इसे 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. PHP MySQL खोज में कोई परिणाम नहीं मिलने पर संदेश प्रदर्शित करना

  3. चयन करें * OpenQuery के बिना SQL सर्वर का उपयोग करके MySQL लिंक्ड सर्वर से

  4. मैं MYSQL में किसी अन्य कॉलम द्वारा MAX (कॉलम मान), विभाजन के साथ पंक्तियों का चयन कैसे कर सकता हूं?

  5. अंतिम x ब्लॉग प्रविष्टियाँ - लेकिन प्रति उपयोगकर्ता केवल एक बार