Попросить Entity Framework не извлекать список связанных сущностей перед добавлением в него нового - PullRequest
0 голосов
/ 29 ноября 2011

Два сценария:

У меня есть Nodes и NodeDetails в формате XML.Я перебираю документ, создавая новую сущность Node, затем добавляю к ней NodeDetails, затем сохраняю их вместе, вызывая db.SaveChanges().Когда я отслеживаю вызовы, я вижу только несколько операторов вставки: сначала для Node, затем для NodeDetails.

Во втором сценарии у меня есть сообщения и сообщения.Сообщения уже хранятся в базе данных.Поэтому я извлекаю сообщение, анализирую его, добавляю в него PostDetails, а затем сохраняю.Когда я отслеживаю звонки, я вижу выбор из таблицы PostDetails для этого сообщения, а затем вижу вставки.Часть выбора происходит, когда я доходю до утверждения, которое говорит: post.PostDetails.Add(newPostDetail);

Теперь я понимаю причину, но я хотел бы как-то переопределить ее.Есть ли способ сказать EF не получать список перед вставкой?

1 Ответ

0 голосов
/ 29 ноября 2011

При вызове post.PostDetails.Add(newPostDetail) метод EF загружает коллекцию PostDetails.EF выполняет эту отложенную загрузку при первом доступе к свойству.Это приводит к выполнению оператора select.

Этого можно избежать, если вы добавляете элементы в коллекцию в первый раз.

post.PostDetails = new List<PostDetail>();
post.PostDetails.Add(newPostDetail);

Или вы можете напрямую добавить новыйPostDetail к контексту без добавления его в коллекцию.

var postDetail = new PostDetail{ Post = post };
//populate other properties
db.PostDetails.Add(postDetail);
...