SubSonic SimpleRepository Updates Причина Пустые ссылки на исключения - PullRequest
2 голосов
/ 01 сентября 2009

Исследуя новый SimpleRepository SubSonic, я обнаружил, что вызов метода Update () всегда выдает NullReferenceException . Это даже верно в примере загрузки MVC, которая включена в выпуск 3.0.0.3.

Кто-нибудь знает, есть ли способ получить обновления для успеха?

Вот пример. Оператор if работает; он добавляет таблицу и создает запись. Запуск этого кода во второй раз в блок else, и обновление вызывает исключение.

var repo = new SimpleRepository("c", SimpleRepositoryOptions.RunMigrations);

var user = repo.Single<User>(u => u.Email == "a@b.com");

if (user == null)
{
    repo.Add(new User { Email = "a@b.com", Name = "Test" });
}
else
{
    user.Name = DateTime.Now.ToString();
    repo.Update(user);
}

public class User
{
    public int Key { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Я думаю, что нашел проблему. В источнике SubSonic есть незначительный недостаток в процедуре обновления, когда он запрашивает список таблиц в объекте запроса на обновление имени столбца. Запрос Linq должен был использовать свойство столбца QualifiedName, а не свойство Name. В настройках запроса (который находится справа от запроса) используется полное имя.

Я взял на себя смелость представить проблему и на сайте SubSonic GitHub:)

Для тех, кто заинтересован, проблема в Update.cs (в папке Query), строка 229.

Изменить это ...

var col= table.Columns.SingleOrDefault(
  x => x.Name.Equals(s.ColumnName, StringComparison.InvariantCultureIgnoreCase)
);

к этому ...

var col = table.Columns.SingleOrDefault(
  x => x.QualifiedName.Equals(
    s.ColumnName, StringComparison.InvariantCultureIgnoreCase
  )
);

Перестройте и все готово.

0 голосов
/ 16 октября 2009

Я также столкнулся с этой проблемой, и мне удалось загрузить последний источник SubSonic, и проблема уже была устранена. Просто откройте проект SubSonic.Core и выполните сборку и замените ссылку вашего проекта на SubSonic.Core.

Загрузить последний источник http://github.com/subsonic/SubSonic-3.0

Boom - Обновление репозитория снова работает!

...