考虑以下类:
public class Unidade
{
public int UnidadeId { get; set; }
public string Apelido { get; set; }
public string Descricao { get; set; }
}
和
public class Estrutura
{
public int Id { get; set; }
…
public int UnidadeId { get; set; }
public virtual Unidade Unidade { get; set; }
…
public int UnidadeCompraId { get; set; }
public virtual Unidade UnidadeCompra { get; set; }
…
}
查询 Estruturas.Single(e => e.Id == 120898(。Unidade.Descricao 将返回一个错误,实际上是因为 Estruturas.Single(e => e.Id == 120898(。Unidade 为空。
此示例中使用的 Id (120898( 有效,因为设置了 UnidadeId 的有效值。
怎么了?如何访问 de 值 德斯里考 有一个有效的埃斯特拉拉?
在 C# 6 中:
struturas.Single(e => e.Id == 120898).Unidade?.Descricao
如果 Unidade
为 null,您将生成空
问题是您关闭了延迟加载。 虽然这可能更好。 那么问题是你需要.在呼叫之前包括。单个,否则它不会提取其他表数据。
编辑
该表或此其他表的外键要么根本没有定义,要么设置在错误的列上。 因此,它最终会尝试链接错误的 2 条数据,而您最终在那里找不到任何数据。
测试这一点的一种简单方法是简单地执行此操作:
string sql = Estruturas.Where(e => e.Id == 120898).Include(a => a.Unidade).ToString();
这将显示 EF 将运行的 SQL,减去实际参数值。 确保它显示您期望的外观。 您甚至可以直接在 Sql Server 中运行此查询,并填写参数以确保您也获取数据。
此外,您必须在表的某个位置定义 [Key]。 外键设置假定它仅链接回另一个表的 PK。