EF4.0中的延迟加载会冻结UI

时间:2012-10-26 09:54:31

标签: c# entity-framework mvvm .net-4.0 freeze

您好我正在使用WPF,EF和MVVM(.NET4.0)设计应用程序。

我在绑定数据时面临冻结UI的问题。我认为这是因为延迟加载。

MVVM:

        ThreadPool.QueueUserWorkItem(state =>
        {
                IsProgressBarVisible(true);

                var service = Context.SomeModel.ToList();
                BgServiceCompleted(service);
        });

XAML:

"{Binding OrderItemViews.SOmeModel_A.SomeModel_B.SOmeField}"
"{Binding OrderItemViews.Country.Name}"

某些型号:

public class SomeModel_A
{
    public int Id { get; set; }
    ....        
    public int SomeB_Id { get; set; }
    public virtual SomeModel_B SomeModel_B { get; set; }
}

我找到了解决这个问题的方法。

1)在ItemsSource-Binding中设置IsAsync-Property。

"{Binding OrderItemViews.SOmeModel_A.SomeModel_B.SOmeField, IsAsync=true}"

界面不会冻结,但会在一段时间后显示该值。这会让一些用户感到困惑。

2)使用Include加载包含数据。 例如:

Context.SomeModel.Include(a => a.SomeModel2).Load();

但在我的情况下,上下文没有包含。为什么呢?

哪种解决此问题的最佳方法?

请您给我一个指导,说明我该怎么做或者我可以阅读和了解的任何有用资源? 感谢

1 个答案:

答案 0 :(得分:1)

Include不属于标准库,您必须添加using System.Data.Entity;。如果失败,Context.SomeModel返回的类型是什么?