entity-framework – 具有列表的实体框架复杂对象
发布时间:2020-12-16 09:13:32 所属栏目:asp.Net 来源:网络整理
导读:这是我关于堆栈溢出的第一个问题,所以我会尽量准确. 这是我的模特: namespace GRHMeca.Models { public class Projet { [Key] public int ID { get; set; } [Required] public String Nom { get; set; } public String Description { get; set; } public Li
这是我关于堆栈溢出的第一个问题,所以我会尽量准确.
这是我的模特: namespace GRHMeca.Models { public class Projet { [Key] public int ID { get; set; } [Required] public String Nom { get; set; } public String Description { get; set; } public List<Membre> Membres { get; set; } } } 而Membre是另一种常规模特. 我面临的问题如下: Projet projet = db.projets.Find(id); IList<Membre> SelectionList = projet.Membres.ToList(); 我得到一个空指针异常; IEnumerable<Membre> SelectionList = new List<Membre>(); SelectionList = db.Membres .ToList() .AsEnumerable<Membre>() .Except<Membre>( db.Membres .ToList() .AsEnumerable<Membre>() .Except<Membre>( projet.Membres .ToList() .AsEnumerable<Membre>() ) ) .ToList(); 我正在使用实体框架6,MVC 5和代码优先迁移. 非常感谢 解决方法
当您调用查找实体框架时,从数据库加载实体但不加载其导航属性(引用其他实体的属性) – 如Membres集合.因为它没有加载也没有初始化为空集合,所以当你在projet.Membres上调用.ToList()时会得到NullReferenceException.
你有两个选择.将virtual关键字添加到集合中…… public virtual List<Membre> Membres { get; set; } …这将使EF在访问时“懒洋洋地加载”该集合(这是第二个数据库查询).或者使用Include方法在单个查询中加载projet plus Membres集合: Projet projet = db.projets.Include(p => p.Membres) .SingleOrDefault(p => p.ID == id); IList<Membre> SelectionList = projet.Membres; (使用System.Data.Entity添加;到您的代码文件中,以使用包含lambda表达式的Include方法.) 在您的情况下,我更喜欢第二个选项,因为您事先知道要加载父实体和子集合. 您可以阅读有关加载相关实体here的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用ASP.NET Web API作为映像服务
- IIS中的 Asp.Net Core 和 dotnet watch
- ADO.NET实用经验 转载
- asp.net-core – 当前的运行时目标框架与项目不兼容
- 如何为部署到aws弹性beanstalk的ASP.NET应用程序设置应用程
- asp.net-mvc-3 – 在MVC3区域中使用Webform
- 适用于ASP.NET的SaaS入门套件,涵盖订阅,计费等
- asp.net-mvc – 如何在ASP.Net MVC中摆脱Home?
- asp.net – 使用内联代码测试Container.DataItem
- asp.net-mvc – 是否有任何基于ASP.NET MVC订阅的入门工具包