好的,我没有太多运气。我是Entity Framework的新手,从昨天开始就一直在与这个小东西作斗争。
以下是我的表格:
在代码中我一次只使用一个项目,这是我用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非常容易,但对于我的生活,我无法理解这一点。
答案 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)
确保已加载其他表。假设另一个表名为TaskStatus
,
thisProject.Tasks.TasksStatusReference.Load();
在设计器中,在数据绑定下,只需像引用任何其他字段一样引用它,并使用TaskStatus.
限定符:TaskStatus.Status
。
答案 3 :(得分:0)
只需添加一些想法即可添加到已建议的内容中。
第一个可能不适用但是如果它确实... :)如果,在您加载项目时您已经知道您想要任务和状态,您可能会急切地将相关数据与项目一起加载。
thisProject =(来自dataEntity.projects.Include中的p(“Tasks.TasksStatuses”) 其中p.id == projectID 选择p).FirstOrDefault();
(我猜你导航属性的名字。)
考虑的另一种可能性......你在使用asp.net吗?当您尝试延迟加载状态数据时,您可能无法再访问上下文。