首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟加载时未填充导航属性

延迟加载时未填充导航属性
EN

Stack Overflow用户
提问于 2016-06-10 18:24:57
回答 1查看 306关注 0票数 0

我正在尝试在mvc官方网站上给出的Mvc示例。这里我有3个模型:学生,课程和注册,其中课程和注册实体是一对多的关系,注册和学生是多对一的关系。

学生、课程和注册的模型如下所示,导航属性被标记为"virtual“,因为我需要执行惰性绑定

代码语言:javascript
复制
 public class Student
    {
        public int StudentID { get;set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }
        public virtual IEnumerable<Enrollment> Enrollments { get; set; }
    }

以同样的方式我有我的课程模型

我的注册模型

代码语言:javascript
复制
 public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
       // public Grade? Grade { get; set; }

        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }

我在EF 5中使用了Code-First技术。

代码语言:javascript
复制
 public class SchoolContext:DbContext
    {


        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

通过搭建,我已经生成了我所有的视图.On单击我的详细信息操作链接我有一个控制器函数,它被调用

代码语言:javascript
复制
 public ActionResult Details(int id = 0)
        {

            db.Configuration.LazyLoadingEnabled = true;
            db.Configuration.ProxyCreationEnabled = true; 
            Student student = db.Students.Find(id);
           // db.Entry(student).Reference(p => p.Enrollments).Load();
           IEnumerable<Enrollment> s= student.Enrollments;
            if (student == null)
            {
                return HttpNotFound();
            }
            return View(student);
        }

这里的问题是,当在控制器中调用passed.In ()方法时,学生类模型中的导航属性是空的,DB中有对应于id的数据是空的,导航属性没有返回数据(Null)。

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 19:31:56

您必须物化实体,以摆脱查询中当前的延迟加载:

代码语言:javascript
复制
Student student = db.Students.Find(id).ToList();

在db.Students.Find(id);=将从动态代理返回生成的对象后,这将在不使用ToList()的情况下解决问题。

第二个问题是你有一个造型错误:

代码语言:javascript
复制
IEnumerable<Enrollment> enrollments = student.Enrollments; // is wrong

应该是:

代码语言:javascript
复制
ICollection<State> enrollments = student.Enrollments;

代码语言:javascript
复制
var enrollments = student.Enrollments;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37745862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档