考虑以下课程:
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为null
此示例中使用的Id(120898)有效,因为UnidadeId设置的有效值。
怎么了?如何访问具有有效Estrura的Descricao的de值?
答案 0 :(得分:0)
在C#6中:
struturas.Single(e => e.Id == 120898).Unidade?.Descricao
如果Unidade
为空,您将为null
答案 1 :(得分:0)
问题是你关闭了延迟加载。虽然那可能更好。那么问题是你需要在调用之前.Include。单独或它不会获取其他表数据。
修改强>
要么根本没有定义该另一个表的外键,要么在错误的列上设置。因此,它最终试图链接错误的2个数据,最终得不到那里找到的数据。
测试这个的简单方法就是这样做:
string sql = Estruturas.Where(e => e.Id == 120898).Include(a => a.Unidade).ToString();
这将显示EF将运行的SQL减去实际参数值。确保显示出您期望它的外观。您甚至可以直接在Sql Server中使用填写的参数运行此查询,以确保您也可以获取数据。
此外,您必须在表格的某处定义[Key]。外键设置假定它仅链接回另一个表的PK。