EF Lazy Load Collection

时间:2016-04-30 09:53:21

标签: entity-framework-6

我正试着绕过EF。

我有这个实体

 public class Project : IEntity
{
    public int Id { get; set; }
    public String Title { get; set; }
    public String Description { get; set; }
    public int ProjectTypeId { get; set; }
    public string UserId { get; set; }
    public bool Active { get; set; }
    public int ProjectStatusId { get; set; }

    public virtual ICollection<WorkItem> WorkItems { get; set; }
    public ProjectType ProjectType { get; set; }
    public ProjectStatus ProjectStatus { get; set; }
}  

我想收集&#34; WorkItems&#34;延迟加载,但项目类型和项目状态应该预先加载。

我的问题是如何设置它,如何在不安装sql profiler的情况下预先看到它的延迟加载或加载它。

N.B由于序列化原因我设置了延迟加载错误

由于

1 个答案:

答案 0 :(得分:0)

假设您的上下文类似于:

public DbSet<Project> Projects { get; set; }

然后你可以打电话:

MyContext db = new MyContext();
db.Projects.Include(x => x.ProjectType).Include(y => y.ProjectStatus).Where... 

这应该急于加载ProjectType和ProjectStatus,而不是WorkItems。您可以通过将日志输出发送到调试窗口来确认EF在场景后面做了什么:

db.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

不要忘记使用System.Data.Entity;否则你将无法在include中使用lambda表达式。

如果要确保数据层的用户始终加载ProjectType和ProjectStatus,您可以考虑实现自己的存储库而不是DbSet。

希望这有帮助。