2009-10-24 3 views
4

Я некоторое время задавался вопросом, есть ли какой-либо способ в Entity Framework сохранить некоторые изменения в базе данных, а другие нет. Представьте себе ситуацию, в которой я скажу 4 класса сущностей - Клиент, Задача, SalesSchema и Адрес. Каждый из них является отношением клиентов «один ко многим». Теперь я создаю окно с 3 вкладками (с помощью TabControl), и каждый из них имеет DataGridView, в котором перечислены адреса, задачи и схемы продаж, а также для каждой из этих кнопок (добавление, изменение, удаление) для обработки деталей каждого типа сущности.Entity Framework - частичное совершение

Что я хочу сделать, так это разрешить частичное изменение в базе данных, например. пользователь добавляет задание -> он должен быть немедленно сохранен, когда пользователь нажимает на сохранение изменений, но должны быть сохранены только изменения с активной вкладки. (не спрашивайте меня, почему я должен это делать - так хочет клиент)

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

В наборах данных ADO.NET существует способ внесения изменений отдельно - получить изменения, сделать некоторые сотрудники, которые необходимы или даже отклонить изменение.

Возможно ли это с помощью ADO.NET Entity Framework?

ответ

1

Я не уверен, правильно ли я понял вашу проблему/полностью, но большинство требований нужно обрабатывать одним контекстом легко. Ниже приведен простой пример возврата всех объектов определенного типа в их исходное состояние, если после этого вы должны были вызвать SaveChanges() в контексте - только оставшиеся объекты в добавленном или измененном состоянии будут совершать частичную фиксацию.

foreach (System.Data.Objects.ObjectStateEntry x in MyEntity.ObjectStateManager.GetObjectStateEntries(EntityState.Added)) // or modified for that matter. 
{ 
    if (x.EntityKey != null) 
    { 
     if (x.Entity is MyClass) // look haven't tested this code, merely example and may have typo's 
     { 
     MyClass tmpObject = (MyClass)x.Entity; 
     MyEntity.Refresh(RefreshMode.StoreWins, x); 
     } 
    } 
} 

Точка Я пытаюсь получить через это есть много контроля, доступного для вас, если вы отслеживать детали вы желающий «частичными» совершить. Те, которые вы хотите вернуть к исходному состоянию или отбрасыванию, могут быть возвращены или даже полностью удалены из контекста.

Не уверен, что это помогает. Удачи.

+0

Спасибо. Это лучший ответ, поэтому я буду отмечать его как правильное. Чтобы суммировать все это: нет встроенного механизма для выполнения sth. как в наборах данных. Я знаю об обходных решениях, но то, что я действительно хотел знать, было, если я ничего не пропустил. – kubal5003

1

Мое понимание заключается в том, что фиксации в инфраструктуре сущности локализованы в контексте данных, к которым привязаны элементы сущности. Если вы хотите выполнить частичную фиксацию во время работы над некоторыми другими данными, вы можете создать новый контекст данных, загрузить ненужный объект, который вам нужен, внести изменения и отправить в новый контекст данных. Ваш исходный контекст и объект данных должны оставаться нетронутыми и несовместимыми.

+0

Это действительно то, что я делаю. – kubal5003

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