C# 只是不能让实体框架得到我想要的
好吧,我在这方面运气不太好。我是实体框架的新手,从昨天起就一直在为这件小事而奋斗 这是我的桌子: 客户端id,客户端名称 项目id、项目名称、客户端id 任务id、任务名称、项目id、状态id 任务状态id、状态名称 在代码中,我一次只处理一个项目,下面是我如何使用EF加载该项目:C# 只是不能让实体框架得到我想要的,c#,database,entity-framework,C#,Database,Entity Framework,好吧,我在这方面运气不太好。我是实体框架的新手,从昨天起就一直在为这件小事而奋斗 这是我的桌子: 客户端id,客户端名称 项目id、项目名称、客户端id 任务id、任务名称、项目id、状态id 任务状态id、状态名称 在代码中,我一次只处理一个项目,下面是我如何使用EF加载该项目: thisProject = (from p in dataEntity.projects where p.id == projectID s
thisProject = (from p in dataEntity.projects
where p.id == projectID
select p).FirstOrDefault();
之后,当我加载任务时:
thisProject.Tasks.Load();
然后,我将DevExpress XtraGrid的数据源设置为加载的任务:
taskGridControl.DataSource = thisProject.Tasks;
到目前为止,一切都按预期进行,网格显示了我加载的项目的所有任务。但是,我还想显示TaskStatusName字段,它存储在不同的表中
使用sql连接很容易做到这一点,但就我个人而言,我无法理解这一点。最简单的方法是将数据选择到为此网格视图定制的类中:
from t in dataEntity.tasks
where t.projectId == projectID
select new TaskInfo
{
ProjectName = t.project.projectname,
TaskName = t.taskname,
StatusName = t.taststatus.statusname
}
确保另一个表已加载。假设另一个表名为TaskStatus
在设计器中的“数据绑定”下,只需像引用任何其他字段一样引用它,并使用TaskStatus。前面的限定符:TaskStatus.Status
听起来你的任务状态表还没有加载
我认为您可能会更幸运地使用EF版本4,这样您就不需要“thisProject.Tasks.Load”行,任务状态表也会自动为您惰性地加载。只需在已经建议的内容中添加一些想法 第一条可能不适用,但如果适用…:如果在加载项目时,您已经知道需要任务和状态,则可以随项目一起加载相关数据 thisProject=来自dataEntity.projects.IncludeTasks.TasksStatus中的p 其中p.id==projectd 选择p.FirstOrDefault 我在猜测你的导航属性的名称
另一个可能考虑……你在使用ASP.NET吗?当您尝试延迟加载状态数据时,您可能无法再访问上下文。如何知道我是否在EF版本4上?我是在VS2010中开发的,项目是.NET4.0.Ok,解决方案中的所有其他项目都是4.0,这个是3.5。我已经更新了,会看到结果的,谢谢!哇,不确定这是否是我的想象,但一旦我将数据项目更改为4.0,它似乎要快得多。我会不惜一切代价使用EF 4而不是版本1,如果只是为了功能,而且令人惊喜的是,它的启动速度更快!谢谢Julie,但是我正在使用WinForms,并且我考虑过急切地加载数据,但是我有一堆可能的数据类型,它们都具有相同的基本结构,需要时需要加载。这就成功了。我创建了这个类,并选择了它的一个IList实例。然后使用生成的列表对网格进行bing。谢谢
thisProject.Tasks.TasksStatusReference.Load();