0

在我们当前的一个项目中针对 SQL Server 数据库使用 EF4 并遇到了性能问题。假设我有下面的 Book 和 Author 类(未编译,仅出于示例的目的)。

public class Book
{
    public Author Author { get; set; }
}

public class Author
{
    public List<Book> Books { get; set; }
}

可以轻松加载一本书,但是当按以下方式将作者分配给一本书时,即使从未显式访问 Books 属性,也会运行查询以查找作者的所有书籍

在我们的真实示例(不是书籍和作者)中,这可能会加载数千个永远不会使用的对象。没有花哨的 getter/setter 可以触发这个。

关于可能导致问题的任何想法?删除图书列表时不会运行查询,但在某些情况下可能会合法使用。

谢谢,约翰

4

1 回答 1

1

如果您使用的是实体框架,则在首次创建对象时将加载任何未标记为“虚拟”的相关属性。如果您不想为作者自动加载 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

于 2014-01-21T20:07:24.553 回答