【问题标题】:Subsonic 3 LINQ Projection issue, fixed or no?Subsonic 3 LINQ Projection 问题,修复与否?
【发布时间】:2011-03-07 21:31:21
【问题描述】:

我目前遇到了这里(以及其他几个地方)提到的问题: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 始终为空。

如果我将 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
                                }
                }
        };

它工作正常。但这在我们的项目中是不可接受的;我不能总是把名字排成一行(除了如果我可以的话,这会让事情变得不那么清楚)。

但我很困惑,因为看起来这个问题已经解决了:

“修复了 Projections 返回 null 或空设置的问题”

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

那么,谁能告诉我:这个问题没有解决吗?我是否必须应用在http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb 上找到的更改才能完成这项工作?或者我错过了什么。因为查看当前的 SubSonic 源,似乎已包含此修复程序。我觉得这应该既简单又有效,但我却在这上面花费了过多的时间。

【问题讨论】:

    标签: linq subsonic subsonic3 projection


    【解决方案1】:

    在这里恢复一个旧主题,但以防以后有人搜索...

    我也“修复”了同样的问题,并在 cmets 中添加了一些解释,在我在 GitHub 上的这个提交中的 fork 中:https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

    这里实际上还有一个更深层次的问题。如果您选择使用“标准 .NET 内置”投影,那么一些 SubSonic 单元测试开始失败,因为 SS 在其投影生成中做了一些 .NET 投影没有做的额外事情,所以一些SS 的预期功能不起作用。

    我个人认为,较慢的性能(尽管我没有注意到速度下降)是为正确数据付出的小代价。

    【讨论】:

      【解决方案2】:

      您能否给我发送更多代码(尤其是 _pulseQuery 和 _accountQuery 背后的代码),以便我解决此问题。您是使用 SimpleRepository 还是 ActiveRecord 方法或直接查询对象?

      【讨论】:

      • 这几天我没有时间制作一个最小的项目来说明我的问题,但我打算这样做。 _pulseQuery 和 _accountQuery 实现 IQueryable 并简单地公开 SubSonic.Repository.SubSonicRepository.GetAll()。我用一个简单的 DAO 接口包装了 SubSonic 工具,并将 IQueryable 暴露给更高层。我正在使用 SubSonic 的 LINQ 模板(也称为高级模板?)
      • Saintedlama,我在使用 3.0.0.4 时也遇到了这个问题,但我无法在更小的集合中重现它——在更大的项目之外。然而,我在github.com/andymeadows/SubSonic-Defect-Help 的一个小样本集中说明了其他两个常见问题
      【解决方案3】:

      如果你(我)根据这里的答案修改 SubSonic.Core:Subsonic 3.0 and linq

      那么投影就可以正常工作了。

      但是,我认为这是一个非常糟糕的解决方案,因为它需要分叉一个项目并导致性能下降一个数量级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多