2010-06-24 9 views
5

Attualmente sto vivendo il problema menzionato qui (e diversi altri luoghi): Subsonic 3 Linq Projection IssueSubsonic 3 LINQ Problema di proiezione, fisso o no?

Questo sta avvenendo utilizzando il pacchetto 3.0.0.4 rilascio, e si verifica anche quando mi afferra l'ultimo da GitHub e costruirlo.

Sto usando i modelli LINQ.

ho questo codice:

 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 
           } 
       } 
     }; 

Ma NomeAccount è sempre nullo.

Se cambio la NomeAccount Nome:

 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 
           } 
       } 
     }; 

funziona benissimo. Ma non è accettabile nel nostro progetto; Non riesco sempre a mettere in fila i nomi (oltre al fatto che renderebbe le cose meno chiare se potessi).

Ma sono abbastanza confuso perché sembrerebbe questo problema è stato risolto:

"Risolto il problema per cui proiezioni sono state tornando impostazioni nulli o vuoti"

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

Così, qualcuno può dimmi: questo problema non è stato risolto e devo applicare le modifiche trovate qui allo http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb per farlo funzionare? O mi sta sfuggendo qualcosa. Perché guardando attraverso l'attuale sorgente SubSonic sembra che questa correzione sia stata inclusa. Credo che questo dovrebbe essere semplice e funzionare, ma invece ho trascorso una quantità eccessiva di tempo.

risposta

2

Se voi (me) di modificare SubSonic.Core secondo la risposta qui: Subsonic 3.0 and linq

Poi la proiezione funziona correttamente.

Tuttavia, ritengo che questa sia una soluzione molto brutta in quanto richiede biforcazione di un progetto e l'introduzione di una riduzione delle prestazioni di ordine di grandezza.

2

Potrebbe inviarmi un po 'di codice in più (soprattutto cosa c'è dietro _pulseQuery e _accountQuery) in modo da poter risolvere questo problema. Stai utilizzando SimpleRepository o l'approccio ActiveRecord o gli oggetti Query direttamente?

+0

Non avrò il tempo di produrre un progetto minimale che illustri il mio problema per un paio di giorni, ma lo intendo. _pulseQuery e _accountQuery implementare IQueryable e semplicemente esporre SubSonic.Repository.SubSonicRepository .GetAll(). Concludo le installazioni di SubSonic con una semplice interfaccia DAO ed esporre IQueryable a livelli superiori. Sto usando i modelli LINQ di SubSonic (chiamati anche modelli avanzati?) –

+0

Saintedlama, anch'io soffro di questo problema utilizzando 3.0.0.4 ma non sono riuscito a riprodurlo in un set più piccolo, al di fuori di un progetto più grande. Ho tuttavia illustrato altri due problemi pubblicati in un piccolo set di esempi su http://github.com/andymeadows/SubSonic-Defect-Help – andymeadows

1

Rilanciare un vecchio argomento qui, ma nel caso in cui qualcuno cerca di questo più tardi ...

anche io "fisso" questo stesso problema, e mettere qualche spiegazione nei commenti, a mio forchetta su GitHub in questo impegno : https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

Anche in questo caso esiste un problema leggermente più profondo. Se si sceglie di utilizzare le proiezioni "standard .NET integrate", alcuni dei test delle unità SubSonic iniziano a fallire, perché SS fa alcuni extra nella sua generazione di proiezione che la proiezione .NET non fa, quindi alcuni dei la funzionalità prevista di SS non funziona.

Personalmente, penso che, e le prestazioni più lente (anche se non ho notato un calo di velocità) è un piccolo prezzo da pagare per i dati corretti.