entity framework渴望加载不返回数据,延迟加载

我首先使用代码EF5 ,我有一个对象,其集合定义为virtual (延迟加载)。 这会在调用时返回数据。 但是我希望它能够满载。 我从属性签名中删除了virtual ,但现在它总是返回null数据。 EF甚至不运行查询 ,任何人都可以帮忙吗?

编辑:我知道.include()我只是喜欢使用非虚拟属性方法。

对象

User[Key] Id在Resource对象上,该对象是person类的Parent):

 namespace Entities { [Table("Users")] public class User : Person { [Required] public ICollection Roles { get; set; } } } 

角色:

 namespace Entities { public class Role { [Key] public string Id { get; set; } public virtual ICollection Users { get; set; } } } 

这是一种常见的混淆。 延迟加载的反面是: 除非你自己明确地加载(例如通过使用Include加载加载), 否则不加载。

因此,如果您以任何方式关闭延迟加载 – 删除virtual修改器就是其中之一 – 行为不会转变为急切加载不加载

想想看,假设EF会急切地加载未标记为延迟加载的所有内容。 通过执行一个简单的查询,您就冒着加载一半数据库的风险!

默认情况下无法使导航属性急切加载(如果您在阅读上述内容后仍然想要这样做)。

您需要使用include方法强制加载实体中的ICollections。 以下链接可能会对您有所帮助: http : //msdn.microsoft.com/en-us/data/jj574232.aspx

这里只提一件事。

如果我关闭EF的LazyLoading

 this.DbContext.Configuration.LazyLoadingEnabled = false; 

那么,“include”方法将不会加载子实体进行Eagerly加载。

所以,如果我想在查询中使用“include”,我需要同时打开EF的LazyLoading属性。