2011-06-15 39 views
0

我相當確定這是一個延遲加載問題,但在閱讀了關於延遲加載之後,我仍然沒有更接近解決方案。我已經嘗試過延遲加載和關閉,但沒有成功。當我從數據庫中拉出一個節點時,即使這些對象存在於數據庫中,Parent和Children也是null。如何從數據庫中讀取對象時加載相關對象?

我還添加了'IsReference = true'作爲解決此問題的嘗試。

我讓對象引用的數據成員在一個點上是虛擬的,但是我有代理的序列化問題。

DatabaseContext.cs

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext() : base("DatabaseName") 
    { 
    Configuration.LazyLoadingEnabled = false; 
    } 
    public DbSet<Node> Nodes { get; set; } 
} 

Node.cs

[DataContract(IsReference = true)] 
public partial class Node 
{ 

    [DataMember] 
    public long ID { get; private set; } 

    [DataMember] 
    public Node Parent { get; set; } 

    [DataMember] 
    public ICollection<Node> Children { get; set; } 

} 
+0

這看起來不像一個懶加載問題,你的Children集合沒有標記爲虛擬的,所以應該已經實現了節點 - 你確定在DB中有相關的子註釋嗎? – BrokenGlass 2011-06-15 15:55:41

+0

是的。如果我加載所有節點(即var nodes = context.Nodes.ToList()),那麼所有的關係都存在。如果我加載一個節點(即var node = context.Nodes.Find(1)),那麼所有的關係都是空的。當我將它們標記爲虛擬時,它實際上在加載一個節點時起作用,但是我又遇到了序列化問題。我想我可以嘗試解決這些問題,但我寧願有一個解決方案。 – OpticalDelusion 2011-06-15 15:57:48

回答

0

我最終經過包括我想作爲參數(你可以使用實際類型或str ),然後我打開包含,因爲它們返回DbQuery對象,並且實際上不查詢數據庫。感謝您輸入@moi_meme(+1)。

foreach (var include in includes) 
{ 
    query = query.Include(include); 
} 
2

Loading Related Objects

最簡單的方法是在你的查詢中使用.Include("Parent").Include("Children")

+0

我有很多關係很多的對象,做10次包括每次我想要一些對象都很荒謬。上面的代碼是爲了例子。 – OpticalDelusion 2011-06-15 15:58:10