我正试着绕过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由于序列化原因我设置了延迟加载错误
由于
答案 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。
希望这有帮助。