通过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();
}
没用。
它不起作用,因为您使用了延迟加载!
如果你想要延迟加载,你需要你的数据上下文,或者你的程序应该如何知道,到目前为止你已经加载了什么数据?
NorthwindEntities对象不仅仅是一个连接对象。更多。并且只有在实际需要时才打开连接。
如果您真的想处理它,请关闭延迟加载。