2010-06-24 7 views
5

Ich erlebe derzeit die hier erwähnte Problem (und einige andere Plätze): Subsonic 3 Linq Projection IssueSubsonic 3 LINQ Projektionsproblem, behoben oder nicht?

Dies auftritt, die 3.0.0.4 Release-Paket verwendet wird, und es tritt auch auf, wenn ich die neueste von GitHub greifen und es bauen.

Ich verwende die LINQ-Vorlagen.

Ich habe diesen Code:

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

Aber Accountname ist immer null.

Wenn ich die Account auf Namen ändern:

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

Es funktioniert gut. Aber das ist in unserem Projekt nicht akzeptabel. Ich kann die Namen nicht immer in eine Reihe bringen (abgesehen davon, dass es die Dinge weniger deutlich machen würde, wenn ich könnte).

Aber ich bin ganz verwirrt, weil es diese Frage scheinen würde ist behoben:

„Problem behoben, bei Projektionen null oder leer Einstellungen wurden Rückkehr“

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

So kann jeder Sagen Sie mir: Ist das Problem nicht behoben, und muss ich die hier gefundenen Änderungen unter http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb anwenden, damit dies funktioniert? Oder vermisse ich etwas. Beim Durchsehen der aktuellen SubSonic-Quelle scheint dieser Fix enthalten zu sein. Ich denke, das sollte einfach sein und funktionieren, aber stattdessen habe ich viel Zeit darauf verwendet.

Antwort

2

Wenn Sie (me) ändern SubSonic.Core nach der Antwort hier: Subsonic 3.0 and linq

richtig Dann arbeitet der Projektion.

Allerdings halte ich dies für eine sehr schlechte Lösung, da es erfordert, ein Projekt zu forkieren und eine Leistungsreduzierung um Größenordnungen einzuführen.

2

Könnten Sie mir ein bisschen mehr Code senden (insbesondere was hinter _pulseQuery und _accountQuery steht), damit ich dieses Problem beheben kann. Verwenden Sie SimpleRepository oder den ActiveRecord-Ansatz oder die Query-Objekte direkt?

+0

Ich werde nicht die Zeit haben, ein minimales Projekt zu produzieren, das mein Problem für ein paar Tage darstellt, aber ich habe vor, es zu tun. _pulseQuery & _accountQuery implementieren IQueryable und stellen Sie einfach SubSonic.Repository.SubSonicRepository .GetAll(). Ich umfasse die SubSonic-Funktionen mit einer einfachen DAO-Schnittstelle und stelle IQueryable's höheren Ebenen zur Verfügung. Ich benutze SubSonic's LINQ Templates (auch Advanced Templates?) –

+0

Saintedlama, ich leide auch unter diesem Problem mit 3.0.0.4, aber ich konnte es nicht in einem kleineren Set reproduzieren - außerhalb eines größeren Projekts. Ich habe jedoch zwei weitere häufig gestellte Probleme in einem kleinen Beispielsatz unter http://github.com/andymeadows/SubSonic-Defect-Help veranschaulicht – andymeadows

1

hier ein altes Thema Reanimation, aber im Falle sucht jemand später diese für ...

I „fixed“ das gleiche Problem auch, und in den Kommentaren eine Erklärung setzen, in meiner Gabel auf GitHub in diesem begehen : https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

Es gibt tatsächlich ein etwas tieferes Problem hier auch. Wenn Sie sich dafür entscheiden, die "standardmäßigen .NET-integrierten" Projektionen zu verwenden, dann beginnen einige der SubSonic-Komponententests fehlzuschlagen, da SS einige zusätzliche Dinge in seiner Projektionserzeugung tut, die die .NET-Projektion nicht tut, also einige Die erwartete Funktionalität von SS funktioniert nicht.

Persönlich denke ich, und die langsamere Leistung (obwohl ich keine Geschwindigkeitsabnahme bemerkt habe) ist ein kleiner Preis für korrekte Daten zu bezahlen.