2012-08-30 55 views
0

针对我们当前项目之一的SQL Server数据库使用EF4,并遇到性能问题。假设我有下面的Book和Author类(不是编译的,只是为了示例的目的)。实体框架4多余的查询加载关系

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

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

一本书可以很容易地加载但是当作者被分配到一本书按照下面,查询运行查找所有书籍的作者即使书籍财产从未明确地访问

在我们现实世界的例子中(不是书籍和作者),这会加载数千个永远不会使用的对象。没有可能引发这种情况的花哨的获得者/设定者。

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

感谢, 约翰

+0

你使用POCO T4发电机吗? –

+0

拉迪斯拉夫 - 是的使用t4模板进行一些小修改 – John

回答

1

如果您正在使用实体框架,那么没有标记为第一次创建对象时,“虚拟”将被加载任何相关的属性。如果你不想自动加载书籍属性的作者,那么就更新你这样的代码:

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