我想使用实体框架将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();
}
没用。
答案 0 :(得分:0)
它不起作用,因为你使用延迟加载!
如果你想延迟加载,你需要你的datacontext,或者你的程序应该知道你到目前为止加载了什么数据?
NorthwindEntities对象不仅仅是一个连接对象。它还有更多。 并且只有在实际需要时它才会打开连接。
如果你真的想要处理它,请关闭延迟加载。