【问题标题】:ADO.net Entity One Relationship is always returning nullADO.net 实体一关系始终返回 null
【发布时间】:2009-08-06 13:10:06
【问题描述】:

我设置了 4 个单独的表,它们之间都有 fk 关系。我遇到的主要问题是在一个名为 EmployeeQuestions 的表和 Questions 表之间。我正在使用实体来建模对象。当我得到 EmployeeQuestions 对象时,我会检查它以确保 EmployeeQuestions 和 Employee 之间的关系存在,并且我可以通过该关系获取所有信息,但是 EmployeeQuestions 和 Questions 之间的关系始终为空。我已检查以确保正确设置了关系并且确实如此。此外,我尝试在所有 EmployeeQuestions 的列表中进行搜索,我可以在 Questions 表中查询 QuestionID 的结果,但是我无法获得描述字段。

我对使用数据库非常陌生,非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: c# database entity-framework


    【解决方案1】:

    你能告诉我们你正在使用的查询吗?

    默认情况下,实体框架将遍历关联以获取关联“另一端”的对象 - 您必须明确执行此操作。

    var emps = from e in ObjectContext.Employees 
               where (some condition)
               select e;
    

    在这种情况下,您的“Employee.Questions”关联(假设它被称为)将始终为 NULL - 按照设计。

    您可以在查询中指定“包含”:

    var emps = from e in ObjectContext.Employees.Include("Questions") 
               where (some condition)
               select e;
    

    现在在这种情况下,当获取员工时,相关的“问题”也会被加载。

    或者你可以这样做:

    var emps = from e in ObjectContext.Employees 
               where (some condition)
               select e;
    
    foreach(Employee e1 in emps)
    {
      if(!e1.QuestionReference.IsLoaded)
      {
         e1.QuestionReference.Load();
      }
    }
    

    在代码中显式加载关联的对象。

    由于很多人认为这是一个缺点,在 EFv4 中,将有一个选项可以打开这种自动“延迟”加载 - 但同样,您必须明确且有意识地这样做。

    马克

    【讨论】:

    • 非常感谢,真是令人沮丧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2015-08-15
    • 2012-03-18
    • 2016-11-04
    • 2016-07-28
    相关资源
    最近更新 更多