对我们当前的某个项目使用EF4针对SQL Server数据库并遇到了性能问题。假设我有下面的Book和Author类(没有编译,只是为了示例的目的)。
public class Book
{
public Author Author { get; set; }
}
public class Author
{
public List<Book> Books { get; set; }
}
可以轻松加载图书但是,如果按照以下方式将作者分配到图书,则会运行查询以查找作者的所有图书,即使图书属性从未明确访问 < / p>
在我们的真实示例(不是书籍和作者)中,这可以加载数千个永远不会被使用的对象。没有任何花哨的getter / setter可以触发这个。
关于可能导致问题的任何想法?删除“书籍”列表时不会运行查询,但在某些情况下可能会合法使用该查询。
谢谢, 约翰
答案 0 :(得分:1)
如果您正在使用Entity Framework,那么在首次创建对象时,将加载未标记为“virtual”的任何相关属性。如果您不想为作者自动加载Books属性,那么只需更新您的代码:
public class Book
{
public Author Author { get; set; }
}
public class Author
{
public virtual List<Book> Books { get; set; }
}
有关预先加载与延迟加载的详细信息,请参阅... http://msdn.microsoft.com/en-us/data/jj574232.aspx