相关的子实体(实体框架4)已加载,但我无法绑定到它们

本文关键字:实体 绑定 框架 加载 | 更新日期: 2023-09-27 18:01:13

我将以下SQL表映射到两个实体(具有相同属性(

 Two Tables look like:
 MasterPartNumbers (parent) many  -> many     MasterPartsLists (children)
 (PK) pnID                                   (PK)(FK) parentPnID
      pn                                     (PK)     pnID   
      pnDesc                                          qty
                                                      price
                                                      isAssembly

注意:这些SQL表只是简单地添加到我的模型中,映射保持原样。因此,它们每个都有作为导航属性的主键/外键属性。

我有一个ObservableCollection作为ItemsSource绑定,它看起来像:

         public ObservableCollection<MasterPartNumber> SelectedAssyBOMLineItems
    {
        get
        {
            if (this._selectedTopLevelAssyPN != null)
            {
                var bomItems = (from childMpn in this._context.MasterPartNumbers
                                from childMpl in this._context.MasterPartsLists
                                where childMpl.parentPnID == this._selectedTopLevelAssyPN.pnID //this._selectedTopLevelAssyPn.pnID is simply the selected "Parent" part number in an adjacent ListBox on my View (usercontrol). It is of type MasterPartNumber
                                where childMpl.pnID == childMpn.pnID
                                select childMpn
                                );
                return this._selectedAssyBOMLineItems = new ObservableCollection<MasterPartNumber>(bomItems);
            }
            return this._selectedAssyBOMLineItems;
        }
        set
        {
            this._selectedAssyBOMLineItems = value;
            RaisePropertyChanged("SelectedAssyBOMLineItems");
        }

到目前为止一切都很好——我能够绑定到MasterPartNumbers的所有属性,并且我正在DataGrid中查看查询提供的预期数据子集。但是,我无法绑定到任何MasterPartNumbers.MasterPartsLists属性。当我逐步通过调试器时,我可以看到它们已加载。我错过了什么?

我希望通过在查询中使用类似_context.MasterPartNumbers.Include("MasterPartsLists")的东西从上下文加载相关实体,将绑定路径引用为{binding MasterPartsList.isAssy}。

我正在寻找的行为与在这里找到的答案相似

提前感谢!:(

相关的子实体(实体框架4)已加载,但我无法绑定到它们

在这种情况下,您很可能希望第二个控件使用类似的东西绑定到第一个控件

<DataGrid ItemSource="{Binding MasterPartNumbers}" x:Name="MasterControl" />
<DataGrid ItemSource="{Binding ElementName=MasterControl, Path=SelectedItem.Children} />

假设您的MasterPartNumbers类具有形式

class MasterPartNumbers 
{
    IEnumerable<MasterPartsLists> Children { get; }
{

足够简单的

            var bomItems = this._context.MasterPartNumbers.Include(x => x.Children);

您可能需要从EntityFramework 5.x程序集中导入System.Entity。否则,您将需要使用字符串而不是lambda。