只是不能让实体框架拉我想要的东西

时间:2010-11-16 23:57:24

标签: c# database entity-framework

好的,我没有太多运气。我是Entity Framework的新手,从昨天开始就一直在与这个小东西作斗争。

以下是我的表格:

  1. 客户(id,clientname)
  2. 项目(id,projectname,clientid)
  3. 任务(id,taskname,projectid,statusid)
  4. TaskStatuses(id,statusname)
  5. 在代码中我一次只使用一个项目,这是我用EF加载该项目的方式:

    thisProject = (from p in dataEntity.projects
                       where p.id == projectID
                       select p).FirstOrDefault();
    

    然后我加载任务时:

    thisProject.Tasks.Load();
    

    然后我将DevExpress XtraGrid的数据源设置为已加载的任务:

    taskGridControl.DataSource = thisProject.Tasks;
    

    到目前为止,一切都按预期工作,网格显示我已加载的项目的所有任务。但是,我还想显示Task statusname字段,并将其存储在另一个表中。

    使用sql join非常容易,但对于我的生活,我无法理解这一点。

4 个答案:

答案 0 :(得分:3)

最简单的方法是将数据选择到为此网格视图定制的类中:

from t in dataEntity.tasks
where t.projectId == projectID
select new TaskInfo
{
    ProjectName = t.project.projectname,
    TaskName = t.taskname,
    StatusName = t.taststatus.statusname
}

答案 1 :(得分:1)

听起来您的任务状态表尚未加载。

我认为你可能会有更多的运气与EF版本4 - 然后你不需要'thisProject.Tasks.Load()'行,任务状态表也将自动懒惰地加载你。

答案 2 :(得分:0)

  1. 确保已加载其他表。假设另一个表名为TaskStatus

    thisProject.Tasks.TasksStatusReference.Load();
    
  2. 在设计器中,在数据绑定下,只需像引用任何其他字段一样引用它,并使用TaskStatus.限定符:TaskStatus.Status

答案 3 :(得分:0)

只需添加一些想法即可添加到已建议的内容中。

第一个可能不适用但是如果它确实... :)如果,在您加载项目时您已经知道您想要任务和状态,您可能会急切地将相关数据与项目一起加载。

thisProject =(来自dataEntity.projects.Include中的p(“Tasks.TasksStatuses”)                    其中p.id == projectID                    选择p).FirstOrDefault();

(我猜你导航属性的名字。)

考虑的另一种可能性......你在使用asp.net吗?当您尝试延迟加载状态数据时,您可能无法再访问上下文。