延迟加载公式导致ListBox选择的奇怪行为

时间:2013-01-09 03:10:13

标签: c# wpf nhibernate mvvm .net-4.0

感谢阅读。

我对`ListBox有一种非常奇怪的行为,显然是通过在我的实体中使用延迟加载的公式属性导致的(显然我错了)。

我正在使用Fluent NHibernate作为我的映射,这是我的一个实体的一个特定映射:

class HeadquartersMap : ClassMap<Headquarters>
    {
        public HeadquartersMap()
        {
            Id(x => x.Id);

            Map(x => x.Name)
                .Not.Nullable()
                .Unique()
                .Length(50);

            Map(x => x.CaseIdFormat)
                .Not.Nullable()
                .Length(50);

            Map(x => x.NextCaseId)
                .Not.Nullable();

            Map(x => x.CaseCount)
                .Formula("(select count(*) from \"Case\" AS caseTable where caseTable.headquarters_id = Id)")
                /*.LazyLoad()*/
                .Generated.Always();

            Version(x => x.Version);
        }
    }

ListBox绑定到NHibernate从数据库生成的集合(来自Headquarters表中的行)。因为它是一个数据库请求并且可能需要很长时间,所以它在一个Task中完成(但我不认为它是一个线程问题,见下文)。没有延迟加载,ListBox按预期工作,项目被选中,但是当我启用延迟加载(这是可取的)时,ListBox开始工作不好:我可以选择一个项目第一次,但ListBox不再更新选择(每当我选择一个项目时,选择不会更新,如果你使用键盘上的向上和向下箭头,应该选择的项目是'突出显示)。

  • 我正在使用自定义模板,如果这很重要,但ListBox(当然使用相同的模板)可以正常使用手动创建的列表(没有NHibernate
  • 不要认为这是一个线程问题,因为没有延迟加载的同一个实体工作正常。我甚至尝试在UI线程中设置集合而没有运气
  • 另一个实体使用Lazy-loading作为集合(没有公式)并且工作正常。
  • 会话保持相应打开(我正在使用会话形式方法)
  • 这不是随机行为(除非我非常,非常,非常不幸):它总是发生在这个实体(以及其他带有延迟加载公式的人)
  • 不会产生任何输出或异常(显然)。 Visual Studio被配置为在发生CLR异常时中断,并且它没有告诉任何异常。

非常感谢您的任何建议

0 个答案:

没有答案