如何使用两次引用另一个表?

时间:2018-01-08 12:35:46

标签: c# .net sql-server database entity-framework

考虑以下课程:

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值?

2 个答案:

答案 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。