2010-05-21 1 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

Я отправил электронное письмо Джулии Лерман. Вот ее ответ:

«Я думаю, что такое поведение, как известно (и УЖАСНО) на части EF, я не уверен, что тебе сказать Вы можете посмотреть на форумах MSDN, чтобы увидеть, если.. кто-нибудь из команды может что-то сказать об этом. И, поскольку я нахожусь в середине рассмотрения моей книги до того, как она отправится на печать, я проверю, чтобы у меня было предупреждение об этом где-то там! "

0

1: Поверните его вокруг:

comentarioWorkItem.Usario = autor; 

2: Как ФВ должен ответить на этот вопрос:

previousValue.ComentariosWorkItens.Contains(this) 

... не глядя в ComentariosWorkItens?

+0

С выбором существует. Другой пример: autor.ComentariosWorkItens.Count. EF4 также выберите полный стол, но просто нужно выбрать счетчик. Я думаю, что NHibernate называет это «Extra Lazy» –

+0

Не путайте 'ObjectQuery' и' EntityCollection'. 'MyObjectContext.Usarios.Where (u => u.Id == id) .Firsd(). ComentariosWorkItems.Count()' will * not * выбирает все строки для пользователя. Выполнение этого же в экземпляре будет. Узнайте разницу между LINQ и объектами и LINQ to Entities. –

+0

Но выберет все таблицы ComentariosWorkItems –

Смежные вопросы