कई महीनों तक यह मेरे लिए एक मुद्दा था और किसी भी समर्थित डीबी पर सबसोनिक के साथ काम करते समय मैंने अंडरस्कोर से परहेज किया। कल तक जब मुझे एक विरासत परियोजना का समर्थन करना था जो अपने 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 उनका साफ संपत्ति नाम . से मेल खा रहा है ।