我目前遇到此处提到的问题(以及其他几个地方):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
}
}
};
工作正常。但这在我们的项目中是不可接受的;我不能总是把这些名字排成一行(除了事实,如果可能的话,它会让事情变得不那么清楚。)
但我很困惑,因为看起来这个问题已得到解决:
“修正了投影返回null或空设置的问题”
- http://blog.wekeroad.com/2010/03/21/subsonic-3-0-0-4-released
那么,任何人都可以告诉我:这个问题是不是已修复,我是否必须应用http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb此处的更改来完成此工作?或者我错过了什么。因为查看当前的SubSonic源,看起来已经包含了此修复程序。我觉得这应该是简单而有效的,但我花了相当多的时间。
答案 0 :(得分:2)
如果你(我)根据这里的答案修改SubSonic.Core:Subsonic 3.0 and linq
然后投影正常工作。
但是,我认为这是一个非常糟糕的解决方案,因为它需要分配一个项目并引入一个数量级的性能下降。
答案 1 :(得分:2)
你能给我发一些代码(尤其是_pulseQuery和_accountQuery背后的代码),所以我可以解决这个问题。您是直接使用SimpleRepository还是ActiveRecord方法还是Query对象?
答案 2 :(得分:1)
在这里复兴一个旧主题,但万一有人稍后会搜索...
我也“修复”了同样的问题,并在评论中提出了一些解释,在我的这个提交中的GitHub上:https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2
这里实际上还有一个稍微深一点的问题。如果你选择使用“标准的.NET内置”投影,那么一些SubSonic单元测试开始失败,因为SS在其投影生成中做了一些额外的东西,而.NET投影却没有,所以一些SS的预期功能不起作用。
我个人认为,性能较慢(虽然我没有注意到速度下降)是支付正确数据的一个小代价。