Subsonic 3 LINQ Проекция, исправлена ​​или нет? - PullRequest
5 голосов
/ 24 июня 2010

В настоящее время я испытываю проблему, упомянутую здесь (и в некоторых других местах): Subsonic 3 Linq Projection Issue

Это происходит с использованием пакета выпуска 3.0.0.4, а такжепроисходит, когда я беру последнюю версию из GitHub и собираю ее.

Я использую шаблоны LINQ.

У меня есть этот код:

        var newModel = new ViewModels.HomeIndexViewModel() {
            PulseListViewModel = 
                new ViewModels.PulseListViewModel 
                {
                    Pulses = from p in _pulseQuery
                             join a in _accountQuery on p.AccountId equals a.AccountId
                             orderby p.CreateDate descending
                             select new PulseListViewModel.Pulse() 
                                {
                                      AccountName = a.Name
                                    , Category = p.Category
                                    , CreateDate = p.CreateDate
                                    , Link = p.Link
                                    , Message = p.Message
                                    , Source = p.Source
                                    , Title = p.Title
                                }
                }
        };

Но AccountName всегда имеет значение null.

Если я изменю имя учетной записи на имя:

        var newModel = new ViewModels.HomeIndexViewModel() {
            PulseListViewModel = 
                new ViewModels.PulseListViewModel 
                {
                    Pulses = from p in _pulseQuery
                             join a in _accountQuery on p.AccountId equals a.AccountId
                             orderby p.CreateDate descending
                             select new PulseListViewModel.Pulse() 
                                {
                                    Name = a.Name
                                    , Category = p.Category
                                    , CreateDate = p.CreateDate
                                    , Link = p.Link
                                    , Message = p.Message
                                    , Source = p.Source
                                    , Title = p.Title
                                }
                }
        };

Работает нормально.Но это не приемлемо в нашем проекте;Я не всегда могу выстроить имена в соответствие (кроме того факта, что если бы я мог, это было бы менее понятно).

Но я совершенно сбит с толку, потому что казалось, что эта проблема исправлена:

«Исправлена ​​ошибка, из-за которой проекции возвращали нулевые или пустые настройки»

- http://blog.wekeroad.com/2010/03/21/subsonic-3-0-0-4-released

Итак, кто-нибудь может сказать мне: эта проблема не устранена, и нужно ли мнеприменить изменения, найденные здесь на http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb, чтобы сделать эту работу?Или я что-то упустил.Поскольку, просматривая текущий источник SubSonic, кажется, это исправление было включено.Я чувствую, что это должно быть просто и работать, но вместо этого я потратил на это слишком много времени.

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Не могли бы вы прислать мне немного больше кода (особенно то, что стоит за _pulseQuery и _accountQuery), чтобы я мог решить эту проблему. Используете ли вы SimpleRepository или подход ActiveRecord или объекты Query напрямую?

2 голосов
/ 24 июня 2010

Если вы (я) измените SubSonic.Core в соответствии с ответом здесь: Subsonic 3.0 и linq

Тогда проекция работает правильно.

Тем не менее, я считаю это очень плохим решением, так как оно требует разветвления проекта и снижения производительности на порядок.

1 голос
/ 06 мая 2011

Возрождаем старую тему здесь, но в случае, если кто-то ищет это позже ...

Я также "исправил" эту же проблему и добавил некоторые пояснения в комментарии, в моей развилке на GitHub в этомcommit: https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

Здесь также есть немного более глубокая проблема.Если вы решите использовать «стандартные встроенные» проекции .NET, то некоторые из модульных тестов SubSonic начнут давать сбои, потому что SS делает некоторые дополнительные вещи при генерации проекций, чего не делает проекция .NET, поэтому некоторые изожидаемая функциональность SS не работает.

Лично я так думаю, и более низкая производительность (хотя я не заметил снижения скорости) - это небольшая цена за правильные данные.

...