我在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,甚至不加载数据库加载。
有没有办法包含/排除要加载的基元类型?
答案 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)
};