2010-05-21 72 views
0

例1:EF4。添加一個關係對象導致全表選擇

「autor.ComentariosWorkItens.Add(comentarioWorkItem);」

autor.ComentariosWorkItens使EF4加載所有ComentariosWorkItens。

出2:

comentarioWorkItem.Usuario =作者日期;

Fixup時使EF加載所有ComentariosWorkItens太:

private void FixupUsuario(Usuario previousValue) 
    { 
     if (previousValue != null && previousValue.ComentariosWorkItens.Contains(this)) 
     { 
      previousValue.ComentariosWorkItens.Remove(this); 
     } 

     if (Usuario != null) 
     { 
      if (!Usuario.ComentariosWorkItens.Contains(this)) 
      { 
       Usuario.ComentariosWorkItens.Add(this); 
      } 
     } 
    } 

我如何避免這種情況?

回答

0

我給Julie Lerman發了一封電子郵件。在這裏她的回答:

「我認爲在英孚的一部分,這是已知的(和AWFUL)的行爲我不知道該怎麼告訴你 你可能想在MSDN論壇看看,看看。任何來自團隊的人都有什麼可以說的。 而且,因爲我正在審閱我的書,所以在打印之前,我會檢查並確保我在這裏有一個警告!「

0

1:扭虧爲盈:

comentarioWorkItem.Usario = autor; 

2:如何在EF應該回答這個問題:

previousValue.ComentariosWorkItens.Contains(this) 

...沒有尋找到ComentariosWorkItens

+0

With a Select Exists。 另一個例子:autor.ComentariosWorkItens.Count。 EF4也選擇全表,但只需要一個選擇計數。 我覺得NHibernate調用這個「Extra Lazy」 – 2010-06-07 10:38:12

+0

不要混淆ObjectQuery和EntityCollection。 'MyObjectContext.Usarios.Where(u => u.Id == id).Firsd()。ComentariosWorkItems.Count()'將*不*選擇用戶的所有行。在一個實例上做同樣的事情。瞭解LINQ to Objects和LINQ to Entities之間的區別。 – 2010-06-07 12:20:39

+0

但是會選擇所有的ComentariosWorkItems表 – 2010-06-08 01:21:54

相關問題