我在导出到Excel文件时遇到空对象引用异常错误。 问题是一条记录在其他表中没有项目的数据库中有外来的。我无法更改数据库。
if (item.ShipperId != null)
{
str.Append("<td><font face=Arial Narrow size=" + "14px" + ">" + item.Shipper.ShipperName + "" + "</font></td>");
}
else
{
str.Append("<td><font face=Arial Narrow size=" + "14px" + ">" + "" + "</font></td>");
}
}
ShipperId是外键,在这种情况下无效。
给出了例外item.Shipper.ShipperName
我已经尝试检查它是否为空
if (item.Shipper.ShipperName != null)
但它也在此空检查上给出了异常
答案 0 :(得分:1)
引用Shipper
为空。而不是ShipperName
请检查if (item.Shipper != null)
答案 1 :(得分:0)
正如the answer Ashok M. Prajapati中所提到的,Shipper
- 属性为null
。但由于ShipperId
不为空,这意味着托运人确实存在于数据库中。
ShipperId是外键,在这种情况下无效。
我不相信这种情况。由于它不为空,因此SQL Server将确保密钥存在于Shipper表中。由于foreign key is a constraint数据库不允许您删除项目,如果它有外键。因此,如果正确配置外键,您将永远不会拥有不指向另一个表中的实际项目的键。
因此,您需要做的是在获取实体时包含,或者允许延迟加载。
<强> 1。加载实体时获取。
通过使用Include
,您可以获取导航属性。
var item = context.Items.Include(x => x.Shipper).FirstOrDefault();
<强> 2。使用延迟加载。 如果您仍然在上下文中,则可以使用延迟加载。像explained in MSDN:
public class BloggingContext : DbContext
{
public BloggingContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
}