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属性。