在实体框架中加载选定的原始属性

时间:2011-08-26 14:46:11

标签: entity-framework entity-framework-4 entity-framework-4.1 entity

我在Oracle数据库中有以下结构:

Course(CourseId, Name)
->Student(StudentId, Name, Comment, CourseId)
->Subject(SubjectId, Name, SubjectComment, CourseId)

学生包含一些原始属性(StudentId, Name, CourseId, Comment)和导航属性(Courses [Linked with DTO name Course on CourseId])

表结构也与实体结构相同,当前使用Explicit loading从Oracle数据库中提取数据,使用LoadProperty和Load。

我需要使用selected属性加载Collection和Object,如带有StudentId和Name的Load Student(没有Comment列)。

LoadProperty(Student, s => s.Courses),仅加载CourseId(不要在课程DTO中加载Name原语属性)。因此,Student.Courses.First().CourseId将是一个值,并且Name将为null,因为故意从数据库加载中排除。

LoadProperty(Course, c => c.Subjects)只加载没有Name属性的SubjectId,甚至不加载数据库加载。

有没有办法包含/排除要加载的基元类型?

1 个答案:

答案 0 :(得分:4)

不是使用load属性而不是实体。您必须创建自定义查询并使用投影仅加载选定的列:

var student = from s in context.Students
              select new {
                      StudentId = s.StudentId,
                      ... // Other student's properties
                      CourseId = s.Course.Id,
                      SubjectIds = s.Courese.Subjects.Select(s => s.Ids)   
                  };