Asp.net 在实体框架中正确使用导航属性
我正在制作一个表格,将新的库存添加到我设计的库存跟踪数据库中。我已经完成了到EF的映射,我正在使用LINQ到EF来查询数据 设备表有一个导航属性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)
设备清单
。考虑下面的代码片段:
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
infrom 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的关系,你有延迟加载,你得到了什么错误?你需要提供更多的信息