通过CollectionViewSource加载2个相对表

本文关键字:相对 2个 加载 CollectionViewSource 通过 | 更新日期: 2023-09-27 17:58:24

我想使用实体框架将两个相对表(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部分,它可以工作,但我想将所有内容加载到内存中并关闭连接。

我厌倦了使用懒惰加载:

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

没用。

通过CollectionViewSource加载2个相对表

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

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

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

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