相关的子实体(实体框架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}。
我正在寻找的行为与在这里找到的答案相似
提前感谢!:(
在这种情况下,您很可能希望第二个控件使用类似的东西绑定到第一个控件
<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。