Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在实体框架中正确使用导航属性_Asp.net_Entity Framework_Navigation Properties - Fatal编程技术网

Asp.net 在实体框架中正确使用导航属性

Asp.net 在实体框架中正确使用导航属性,asp.net,entity-framework,navigation-properties,Asp.net,Entity Framework,Navigation Properties,我正在制作一个表格,将新的库存添加到我设计的库存跟踪数据库中。我已经完成了到EF的映射,我正在使用LINQ到EF来查询数据 设备表有一个导航属性设备清单。考虑下面的代码片段: public partial class Content_AddInventoryItems : System.Web.UI.Page { public Equipment equipment; protected void Page_Load(object sender, EventArgs e)

我正在制作一个表格,将新的库存添加到我设计的库存跟踪数据库中。我已经完成了到EF的映射,我正在使用LINQ到EF来查询数据

设备表有一个导航属性
设备清单
。考虑下面的代码片段:

public partial class Content_AddInventoryItems : System.Web.UI.Page
{
    public Equipment equipment;

    protected void Page_Load(object sender, EventArgs e)
    {
        using (MSSInvDBEntities myEntities = new MSSInvDBEntities())
        {
            var manuPop = (from equipment in myEntities.Equipments
                           select equipment.equipmentManu).Distinct();
            ManuList.DataSource = manuPop;
            ManuList.DataBind();
        }
        using (MSSInvDBEntities myEntities = new MSSInvDBEntities())
        {
            var modelPop = from equipment in myEntities.Equipments
                           select equipment.equipmentModel;
            ModelList.DataSource = modelPop;
            ModelList.DataBind();
        }

    }

    private void DisplayEquipmentData()
    {
        ManuList.SelectedValue = equipment.equipmentManu;
        ModelList.SelectedValue = equipment.equipmentModel;
        tboSerial.Text = equipment.EquipmentInventories.serialNumber;

    }
}
但是,当我尝试使用
设备
对象的
设备清单
导航属性来引用
设备清单
对象的
序列号
属性时,会不断出错


你知道我哪里出错了吗?

我不知道你在哪里实例化了你的公共领域
设备。(
equipment
in
from device in…
是另一个变量,用于LINQ查询的范围变量。)查看您的代码,我希望出现
NullReferenceException
,因为
equipment
null

您应该有如下内容:

using (MSSInvDBEntities myEntities = new MSSInvDBEntities())
{
    equipment = (from e in myEntities.Equipments
                 select e)
                .FirstOrDefault();
}
但这也会导致异常,因为您没有加载
设备。EquipmentInvents
属性和延迟加载在
DisplayEquipmentData
方法中不起作用,因为您已经处理了上下文(使用
块在
结束时自动)。延迟加载需要尚未释放的上下文

在您的情况下,我会使用即时加载:

using (MSSInvDBEntities myEntities = new MSSInvDBEntities())
{
    equipment = (from e in myEntities.Equipments.Include("EquipmentInventories")
                 select e)
                .FirstOrDefault();
}

然后,导航属性与此查询一起立即加载,您可以安全地处理上下文。

Slauma说了什么,或者

private void DisplayEquipmentData() 
{ 
    ManuList.SelectedValue = equipment.equipmentManu; 
    ModelList.SelectedValue = equipment.equipmentModel; 
    if (!equipment.EquipmentInventoriesReference.IsLoaded)
        equipment.EquipmentInventoriesReference.Load();
    tboSerial.Text = equipment.EquipmentInventories.serialNumber; 

} 

这是一个1:N的关系,你有延迟加载,你得到了什么错误?你需要提供更多的信息