none
关于关联数据的预加载问题,请帮忙指点,非常急切! RRS feed

  • 问题

  • 原帖我发在了silverlight区,但是没有解决,只好来这里找大家帮忙了!
    http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/9381ddc8-a103-4f75-9892-9447207b78bd

    FV_Student_Students 和 FV_Student_Family 两张表
    关联式1——0..1 的关系,因为不是所有的学生都有家庭关系相关项的。
    关联数据我用显示的方式加载了。但预加载没有效果, 
    public IQueryable<FV_Student_Students> GetClass_Students(string cid)
            {
               // return this.Context.FV_Student_Students.Join(FV_Class_Students,
                IQueryable<FV_Student_Students> query = from student in this.Context.FV_Student_Students.Include("FV_Student_Family")
                            join classes in this.Context.FV_Class_Students
                            on student.StudentID equals classes.StudentID
                            where classes.ClassID==cid
                            select student;
    
                foreach (FV_Student_Students stu in query)
                {
                    if (!stu.FV_Student_FamilyReference.IsLoaded)
                        stu.FV_Student_FamilyReference.Load();
                }
                return query;
            }
    

    但是,显示的非常麻烦,因为我的表结构里有很多关联项,有时,通过关联项只是想得到对应关键键的名称。
    比如典型的:有一张数据表Course_Student {StudentID,CourseID} 
    相关联的就是两张表Student{StudentID,FullName......} 和 Course{CourseID,CourseName......}
    我在查询Course_Student 表的时候,需要同时加载 Student 表和Course表的相关项FullName 和 CourseName,或别的我认为需要的项。

    但是,用Include 方法,就是预加载不了,我非常着急,网上也找到相关的问题所在,请指点指点。!!
    万分感谢!!
    2009年9月25日 14:47

答案

全部回复

  • 求助:silverlight ria服务中如何加载关联数据啊。好像不能用reference.load() 来记载关联数据!
    我需要加载一个学生实体(FV_Student_Students)相关联的 家庭情况(FV_Student_Family)

    我分别做了几次设置还是无法加载数据。
    1.在metadata.cs 中 增加[Include]

           [Display(Name = "家庭")]
           [Include]
            public FV_Student_Family FV_Student_Family;

    2.在SchoolDomainService.cs 中的查询修改如下:获得某个班级的学生列表,并同时加载其关联的家庭情况。 也加了[Include]
      public IQueryable<FV_Student_Students> GetClass_Students(string cid)
            {
               // return this.Context.FV_Student_Students.Join(FV_Class_Students,
                var query = from student in this.Context.FV_Student_Students.Include("FV_Student_Family")
                            join classes in this.Context.FV_Class_Students
                            on student.StudentID equals classes.StudentID
                            where classes.ClassID==cid
                            select student;
                return query;
    }

    3.在silverlight 客户端加载数据
                 SchoolContext = new SchoolDomainContext();          
                loadOp=SchoolContext.Load(SchoolContext.GetClass_StudentsQuery(selectedclass.ClassID),MergeOption.OverwriteCurrentValues);
                loadOp.Completed += new EventHandler(loadOp_Completed);
                pcv = new PagedCollectionView(SchoolContext.FV_Student_Students);

    但是,我或得学生列表中,家庭信息项一直是NULL, 关联是 1—— 0..1 的关系

    请求教各位精通人士了。
    指点下迷津!
    谢谢!!!
    2009年9月21日 17:08
  • 你的FV_Student_Students 表和FV_Student_Family 在数据库中是什么样的关联关系? 有外键关联关系吗?

    你可以追踪一下看看数据库执行的SQL语句是否load了FV_Student_Family.

    如果在数据库没有关联,你可以分别Load FV_Student_Students 和FV_Student_Family,然后通过添加Association attribute来强制关联。
    否则,请发个包给我研究一下。

    2009年9月24日 8:22
  • 关联式1——0..1 的关系,因为不是所有的学生都有家庭关系相关项的。
    前面的关联数据我用显示的方式加载了。
     public IQueryable<FV_Student_Students> GetClass_Students(string cid)
            {
               // return this.Context.FV_Student_Students.Join(FV_Class_Students,
                IQueryable<FV_Student_Students> query = from student in this.Context.FV_Student_Students.Include("FV_Student_Family")
                            join classes in this.Context.FV_Class_Students
                            on student.StudentID equals classes.StudentID
                            where classes.ClassID==cid
                            select student;

                foreach (FV_Student_Students stu in query)
                {
                    if (!stu.FV_Student_FamilyReference.IsLoaded)
                        stu.FV_Student_FamilyReference.Load();
                }
                return query;
            }

    但是,显示的非常麻烦,因为我的表结构里有很多关联项,有时,通过关联项只是想得到对应关键键的名称。
    比如典型的:有一张数据表Course_Student {StudentID,CourseID} 
    相关联的就是两张表Student{StudentID,FullName......} 和 Course{CourseID,CourseName......}
    我在查询Course_Student 表的时候,需要同时加载 Student 表和Course表的相关项FullName 和 CourseName,或别的我认为需要的项。

    但是,用Include 方法,就是预加载不了,我非常着急,网上也找到相关的问题所在,请指点指点。!!
    万分感谢!!
    silverlight+RIA 我也是刚接触,想用来开发个项目的,可是问题很多,刚才检索其他数据表的时候,同样的问题,依然没办法解决。真是焦急啊。

    谢谢指点,包怎么发给你呢???






    2009年9月25日 14:27
  • 数据肯定是关联了,实体模型中已经自动产生的相关引用啊。
    可惜这里不能发图,不然问题就好说明点了。
    2009年9月25日 14:30
  • 请发到xun.sun(@) microsoft.com

    2009年9月25日 16:59
  • 已经发送到你的邮箱,请查收!!
    谢谢
    2009年9月26日 5:44
  • 我也遇一这个问题,能把解决方法公布出来吗,谢谢!


    email:ayurep(A)qq.com

    • 已编辑 ayurep 2012年5月28日 6:26
    2012年5月28日 6:23