如何使用对另一个表的两次引用



考虑以下类:

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。

最新更新