2012-08-30 117 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