SubSonic 3 ActiveRecord Проблемы - пустые данные - PullRequest
1 голос
/ 25 августа 2009

Когда я проверял свойство .Columns одной из моих бизнес-сущностей, у меня отсутствовали значения Table и PropertyName. Я получаю правильное количество записей от таких вещей, как Take (5), но все 5 объектов будут заполнены пустыми строками и 0 значениями.

Только что попробовал с другим соединением SQL и тоже самое? С чего начать устранение неисправностей?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ и КОД:

// Replacing the CleanUp function seems to be cause
// What am I doing here that is not allowed?
// I'm dealing with Table names like USER_DETAILS and would prefer UserDetail  
// rename standard CleanUp to CleanUp2 then paste this into Settings.ttinclude
string CleanUp(string tableName)
{
    string res = tableName;
    //capitalization
    char[] ca = res.ToLower().ToCharArray();
    for (int i = 0; i < ca.Length; i++) {
      if ((i == 0) || (ca[i - 1] == '_')) {
            ca[i] = char.ToUpper(ca[i]);
      }         
    }
    res = new string(ca);
    //strip underlines
    res = res.Replace("_","");
    //strip blanks
    res = res.Replace(" ","");
    return res;
}  

РЕШЕНО (вроде) : Похоже, именно удаление подчеркиваний заставляет все идти на юг. Роб, есть ли шанс, что это сработает в более поздней версии? Я был бы рад помочь, если бы вы могли указать мне правильное направление в источнике.

Ответы [ 4 ]

2 голосов
/ 26 августа 2009

Просто заметьте, я думаю, что это то же самое, что и проблема № 107, с которой я столкнулся на прошлой неделе. http://github.com/subsonic/SubSonic-3.0/issues#issue/107

2 голосов
/ 25 августа 2009

Если вы можете опубликовать свой CREATE sql для одной из ваших таблиц - это был бы способ начать. Также - убедитесь, что у вас есть первичные ключи и т. Д.

0 голосов
/ 02 ноября 2009

После прохождения базы кода, я думаю, что я нашел более простое решение (ИМХО).

Интерфейс IColumn имеет определенное свойство 'PropertyName', которое, как мне кажется, предназначено для указания имени свойства, представляющего этот столбец в классе таблицы (схожее со свойством ClassName в ITable). В шаблоне Structs.tt это не задано, поэтому я установил его (около строки 39) в значение свойства столбца CleanName.

Это позволяет затем методу GetColumnByPropertyName в DatabaseTable.cs (около 110 строки) использовать PropertyName вместо использования Name.

Я добавил свойство Name в интерфейс IColumn, так как это казалось недосмотром, что означает, что в метод расширения Load (Database.cs около 143 строки) можно изменить доступ к свойству Columns переданного в объект (если он является производным от IActiveRecord) и использовать его для сопоставления «Name» с «PropertyName».

Если я найду время для определения нашего GitHub, я отправлю изменения.

Приветствия

Gary

0 голосов
/ 29 августа 2009

Я только что применил вашу функцию очистки в моих шаблонах SubSonic3. Работает просто отлично. Но прежде чем сделать это, я сделал несколько исправлений в Subsonic Core для связи между объектами Subsonic и столбцом таблицы.

  • Сначала я попытался собрать столбцы, которые будут проецироваться (ExecutionBuilder.cs - строка 217), а затем добавить его в список строк
  • Передать этот список в QueryCommand так объект QueryCommand знает, какой столбец, который будет проецироваться (ExecutionBuilder.cs - строка 233)
  • Сделайте некоторые изменения в DbQueryProvider.cs (строка 297), чтобы DataReader передавал список имен столбцов
  • Наконец DataReader вставит значение из базы данных в соответствии с порядком в списке строк, которые были переданы ранее (строка Database.cs 158)

Вы можете посмотреть подробности того, что я делаю в здесь .

...