【问题标题】:Loading 2 relative tables via CollectionViewSource通过 CollectionViewSource 加载 2 个相关表
【发布时间】:2011-07-20 23:17:52
【问题描述】:

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

我厌倦了使用延迟加载:

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

没用。

【问题讨论】:

    标签: c# wpf entity-framework


    【解决方案1】:

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

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

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

    如果你真的想丢弃它,请关闭延迟加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多