通过CollectionViewSource加载2个相对表

时间:2011-06-06 09:57:19

标签: c# wpf entity-framework

我想使用实体框架将2个相对表(Northwind数据库,Orders和Orders_Details表)加载到两个CollectionView中。

 <Window.Resources>
        <CollectionViewSource x:Key="OrdersView" />
        <CollectionViewSource x:Key="OrdersDetailView" 
             Source="{Binding Source={StaticResource OrdersView}, 
            Path='Order_Details'}" />

    </Window.Resources>
    <Grid  DataContext="{Binding Source={StaticResource OrdersView}}">

        <Grid.RowDefinitions>
            <RowDefinition Height="187*" />
            <RowDefinition Height="124*" />
        </Grid.RowDefinitions>
        <StackPanel>
            <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding}"  Height="187" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="503"/>
        </StackPanel>
        <StackPanel Grid.Row="1">
            <DataGrid AutoGenerateColumns="True" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource OrdersDetailView}}"  Height="124" HorizontalAlignment="Right" Name="dataGrid2" VerticalAlignment="Top" Width="503" />
        </StackPanel>

    </Grid>

 public MainWindow()
        {
            InitializeComponent();

            List<Order> list = new List<Order>();
            using (NorthwindEntities nwe = new NorthwindEntities())
            {
                list = nwe.Orders.Include("Order_Details").ToList();
            }

            Window win = Application.Current.MainWindow;

            var ordersViewSource = win.FindResource("OrdersView") as CollectionViewSource;
            ordersViewSource.Source = list;

            //var ordersDetailView = win.FindResource("OrdersDetailView") as CollectionViewSource;



        }

当我运行此代码时,我得到一个例外:

  

ObjectContext实例已经存在   处置,不能再使用了   需要连接的操作。

修改

如果我删除它使用的部分,但我想将所有内容加载到内存中并关闭连接。

我厌倦了使用延迟加载:

using (NorthwindEntities nwe = new NorthwindEntities())
{
                nwe.ContextOptions.LazyLoadingEnabled = true;
                list = nwe.Orders.ToList();            
 }

没用。

1 个答案:

答案 0 :(得分:0)

它不起作用,因为你使用延迟加载!

如果你想延迟加载,你需要你的datacontext,或者你的程序应该知道你到目前为止加载了什么数据?

NorthwindEntities对象不仅仅是一个连接对象。它还有更多。 并且只有在实际需要时它才会打开连接。

如果你真的想要处理它,请关闭延迟加载。