2010-06-24 18 views
5

Tôi hiện đang gặp sự cố được đề cập ở đây (và một số địa điểm khác): Subsonic 3 Linq Projection IssueSubsonic 3 LINQ Projection issue, cố định hay không?

Điều này xảy ra khi sử dụng gói phát hành 3.0.0.4 và nó cũng xảy ra khi tôi lấy phiên bản mới nhất từ ​​GitHub.

Tôi đang sử dụng Mẫu LINQ.

tôi có mã này:

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

Nhưng AccountName luôn là null.

Nếu tôi thay đổi AccountName để Name:

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

Nó hoạt động tốt. Nhưng điều đó không thể chấp nhận được trong dự án của chúng tôi; Tôi không phải lúc nào cũng có thể làm cho các tên được xếp hàng (ngoài thực tế là nó sẽ làm cho mọi việc ít rõ ràng hơn nếu tôi có thể).

Nhưng tôi khá bối rối vì nó sẽ có vẻ vấn đề này cố được khắc phục:

"Cố định vấn đề mà dự được trở về thiết lập null hoặc trống rỗng"

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

Vì vậy, có thể bất cứ ai cho tôi biết: Vấn đề này có được khắc phục không và tôi có phải áp dụng các thay đổi được tìm thấy tại đây tại http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb để thực hiện công việc này không? Hay tôi đang thiếu cái gì đó. Bởi vì nhìn qua nguồn SubSonic hiện tại nó xuất hiện sửa chữa này đã được bao gồm. Tôi cảm thấy như thế này nên đơn giản và công việc, nhưng thay vào đó tôi đã dành một lượng thời gian quá mức trên đó.

Trả lời

2

Nếu bạn (tôi) sửa đổi SubSonic.Core theo câu trả lời ở đây: Subsonic 3.0 and linq

Sau đó, dự báo hoạt động chính xác.

Tuy nhiên, tôi coi đây là một giải pháp rất tồi vì nó đòi hỏi phải lập dự án và giới thiệu thứ tự giảm hiệu suất độ lớn.

2

Bạn có thể gửi cho tôi thêm một chút mã (đặc biệt là những gì đằng sau _pulseQuery và _accountQuery) để tôi có thể khắc phục vấn đề này. Bạn đang sử dụng cách tiếp cận SimpleRepository hoặc ActiveRecord hoặc các đối tượng truy vấn trực tiếp?

+0

Tôi sẽ không có thời gian để tạo ra một dự án tối thiểu minh họa vấn đề của tôi trong một vài ngày, nhưng tôi dự định. _pulseQuery & _accountQuery triển khai IQueryable và chỉ cần hiển thị SubSonic.Repository.SubSonicRepository .GetAll(). Tôi bọc các cơ sở SubSonic với một giao diện DAO đơn giản và hiển thị IQueryable cho các lớp cao hơn. Tôi đang sử dụng mẫu LINQ của SubSonic (còn gọi là Mẫu nâng cao?) –

+0

Saintedlama, tôi cũng gặp vấn đề này bằng cách sử dụng 3.0.0.4 nhưng tôi không thể tái tạo nó trong một bộ nhỏ hơn - bên ngoài một dự án lớn hơn. Tuy nhiên, tôi đã minh họa hai vấn đề thường được đăng khác trong một mẫu nhỏ được đặt tại http://github.com/andymeadows/SubSonic-Defect-Help – andymeadows

1

Làm sống lại một chủ đề cũ ở đây, nhưng trong trường hợp ai đó tìm kiếm này sau ...

Tôi cũng "cố định" vấn đề này giống nhau, và đặt một số lời giải thích trong các ý kiến, trong ngã ba của tôi trên GitHub trong cam kết này : https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

Thực tế, vấn đề hơi sâu hơn ở đây. Nếu bạn chọn sử dụng các phép chiếu "built-in .NET chuẩn", thì một số xét nghiệm đơn vị SubSonic bắt đầu thất bại, bởi vì SS thực hiện thêm một số thứ trong thế hệ chiếu của nó mà trình chiếu .NET không làm, vì vậy một số chức năng mong đợi của SS không hoạt động.

Cá nhân, tôi nghĩ điều đó và hiệu suất chậm hơn (mặc dù tôi chưa nhận thấy tốc độ giảm) là một mức giá nhỏ để trả cho dữ liệu chính xác.