Bug Report => HasMany IList Foreach

Apr 2, 2009 at 9:00 AM
Edited Apr 2, 2009 at 9:42 AM

            var c=v_rkdt.FindById(1);
            foreach (var v in c.rkmx){

            }

everything is ok~

            var c=v_rkdt.FindById(1);
            c.Save();
            foreach (var v in c.rkmx){

             如果保存过,就遍历不出来了。
    
            }

you can't execute foreach any more ,there is nothing...
you have to findbyId again
------------------------------
我现在如果保存Save过的话只能再FindById一遍,这样可以绕过这个bug,这样绕过的做法,一个是导致FindById要花时间很不划算,而且里面的一些原来读入的关系对象也都没有了,再访问那些关系对象又要生成SQL。。。
--------------------------------
开始我以为是因为47208(work items: 21288, 21287)的问题引入的,
后来下载了47026发现问题依旧。
说明这是一个由来已久的问题。

Apr 2, 2009 at 9:51 AM
-------------
我忘了这个问题您以前解释过了,这就是这么设计的。

刚才看了一下http://dbentry.codeplex.com/WorkItem/View.aspx?WorkItemId=21354

您的评论。

不好意思
Apr 2, 2009 at 9:52 AM
忘记了,不好意思
Apr 2, 2009 at 10:10 AM
找到了一个更好的绕过这个bug的办法~~~
就是在Save之后的适当的时候
o_rkdt.rkmx.Add(o_rkmx);
手动把要遍历的东西加入这个IList中~~~
哦耶~
Coordinator
Apr 2, 2009 at 11:16 AM
This discussion has been copied to a work item. Click here to go to the work item and continue the discussion.
Coordinator
Apr 2, 2009 at 11:21 AM
看来这个问题不符合使用习惯,有一种可能的解决方案是,让Save函数暂时中止Lazy Load,而不是永久中止。实现应该比较麻烦,而且调用过Add的仍然是永久中止,不过比现在应该好一些。