2013-10-11 2 views
0

Я создаю модель домена, которую позже буду сопоставлять с базой данных, используя EF Code First. Это мой первый проект с использованием Entity Framework, и хотя я читал книгу об этом некоторое время назад, я не помню всех подробностей о том, как это работает.Могу ли я запросить измененный объект перед сохранением его изменений?

В одной части модели домена у меня есть отношения «один ко многим».

public class Parent 
{ 
    public IList<Child> Children { get; private set; } 
} 

После того как пользователь изменил экземпляр в памяти Parent, и нажимает на кнопку, то это будет время сохраняться этот экземпляр в базу данных. В то время я должен сначала запустить определенную логику сравнения домена между экземпляром, который существует в базе данных (до сохранения), и несохраненной модифицированной версией, находящейся в памяти. Поэтому мне нужно запросить базу данных для получения немодифицированного дубликата экземпляра Parent и его Children.

Есть ли код EF Сначала позвольте мне безопасно запустить такой запрос? Я просто беспокоюсь, что, когда EF запускает такой запрос, он увидит, что каждый Child уже находится в памяти и поэтому повторно использует эти экземпляры и перезаписывает их модификации вместо создания дубликатов. В этой ситуации я действительно хочу дубликатов.

+0

Как получить экземпляр в памяти? Главное, что если он не отслеживается EntityChangeTracker, тогда вам нужно «прикрепить» его и пометить его состояние «измененным», чтобы при вызове SaveChanges в контексте он мог знать, что его необходимо обновить. Если вы сделаете запрос, он будет отслежен, но если вы просто «прикрепите», он будет отслеживаться, и это займет меньше времени. – jannagy02

ответ

0

Код первый позволяет получить доступ к исходным и измененные значения гусеничного объекта, как это:

Parent parent; 
... 
var curVal = context.Entry(parent).Property(p => p.Property).CurrentValue; 
var origVal = context.Entry(parent).Property(p => p.Property).OriginalValue; 

Вы также должны быть в состоянии сделать это с индивидуальными значениями в коллекции детской

Последующие запросы будут поставьте новый набор объектов с текущими значениями базы данных, но если вы хотите проверить кеш, который имеет место в контексте, это очень просто, как описано здесь:

http://weblogs.asp.net/ricardoperes/archive/2012/03/19/entity-framework-code-first-get-entities-from-local-cache-or-the-database.aspx

+0

Этот код помогает мне визуализировать вещи, но давайте вернемся к моему вопросу: если я запустил запрос после того, как экземпляры были изменены, но до того, как они будут сохранены, будет ли этот запрос (a) возвращать совершенно новый набор экземпляров, (b) обновить встроенные в память «оригинальные» значения из базы данных без перезаписывания «текущих» значений или (в) заставляют меня потерять измененные значения. – HappyNomad

+0

Я отредактировал ответ, чтобы включить информацию об этом –

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