powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework отмена изменений и навигационное свойство
17 сообщений из 17, страница 1 из 1
Entity Framework отмена изменений и навигационное свойство
    #39772083
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я использую EF6 и подход DB-First. У меня есть 3 таблицы "Покупатель", "Товары" и связующая для обеспечения связи многие-ко-многим. Для покупателя студия сгенерировала такой класс, где есть коллекция товаров:
Код: c#
1.
2.
3.
4.
5.
6.
public partial class Customer
{
    <...>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Products> Products { get; set; }
}



Далее средствами EF я загружаю конкретного покупателя и удаляю один или несколько товаров, отменяю изменения и - как мне получить Products в первозданном виде? Упрощенная демонстрация последовательности действий:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var cnt = new MyEntities();
var myCustomer = cnt.Customer.FirstOrDefault(x => x.ID == 5);
var selectedItem = myCustomer.Products.First();
myCustomer.Products.Remove(selectedItem);
Rollback(cnt);

// ??
// myCustomer.Products - не содержит удаленную запись
// пробовал, не работает: cnt.Entry(myCustomer).Collection("Products").Load();



Rollback не изобретал, взял отсюда.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public void RollBack()
{
    var context = DataContextFactory.GetDataContext();
    var changedEntries = context.ChangeTracker.Entries()
        .Where(x => x.State != EntityState.Unchanged).ToList();

    foreach (var entry in changedEntries)
    {
        switch(entry.State)
        {
            case EntityState.Modified:
                entry.CurrentValues.SetValues(entry.OriginalValues);
                entry.State = EntityState.Unchanged;
                break;
            case EntityState.Added:
                entry.State = EntityState.Detached;
                break;
            case EntityState.Deleted:
                entry.State = EntityState.Unchanged;
                break;
        }
   }
}


...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772120
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

Покупатель - Товары не много ко много
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772127
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Верно, один покупатель - много товаров. Но вопрос про Rollback остается.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772130
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1
Код: c#
1.
2.
myCustomer.Products.Remove(selectedItem);
Rollback(cnt);

уберите rollback и просто не сохраняйте контекст в базу. Коммита не было.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772136
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так не получится. Упрощенно говоря, я выгрузил покупателя и его товары и вывел все это в Грид. Выбранный товар (или несколько) пользователь удалил (по кнопке):
Код: sql
1.
myCustomer.Products.Remove(selectedItem);


Теперь он хочет отменить изменения и жмет кнопку "Отмена". На форме (WPF) все должно восстановиться. Загружать заново контекст, вроде как, не самая "чистая" идея, поэтому ищу варианты с Rollback.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772138
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1и вывел все это в Гридвеб, десктоп?
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772142
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Теперь он хочет отменить изменения и жмет кнопку "Отмена". На форме (WPF) все должновижу десктоп.
Но тут две бизнес транзакции. Независимые. А вы делаете в одной.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Rollbackэто ДЛЯ ОШИБОК
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772149
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Теперь он хочет отменить изменения и жмет кнопку "Отмена".давайте из гугла любой пример ВИ или юз кейса.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772150
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1не самая "чистая" идеяох уж эти программисты придумывающие сами себе задачу.)
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772158
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форму я вывожу информацию о покупателе (несколько текстовых полей) и в Гриде - коллекцию связанных товаров. Для простых свойств объекта Покупатель предложенный Rollback работает! Осталось перезагрузить/загрузить коллекцию и все - Роллбэк средствами EF готов без повторного считывания объекта и т.п. Это возможно?
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772164
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,
Ты не понял что роллбэк для ошибок. Или тебе по барабану.
Тогда так и скажи.
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772173
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, не понял. Ну так а почему его нельзя использовать не только для ошибок, а просто? Поменял несколько значений, Отменил, продолжил работу...
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772199
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1Не, не понял. Ну так а почему его нельзя использовать не только для ошибок, а просто? Поменял несколько значений, Отменил, продолжил работу...потому что это для ручного режима. Не автоматического.
Следовательно больше кода, больше ошибок и глюки при многопользовательской работе.
...
У меня на f5 обновляется грид. А у тебя?
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772204
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, какие мои действия при нажатии на кнопку "Отменить изменения"?
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772247
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1В общем, какие мои действия при нажатии на кнопку "Отменить изменения"?
Аналогично F5 на форуме sql ru.
Закрыть контекст как можно раньше без коммита и по новой открыть.
Кнопу заменить на Отмена.
Имхо
...
Рейтинг: 0 / 0
Entity Framework отмена изменений и навигационное свойство
    #39772261
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,
Такая отмена есть у таблы девЭкспресс без ef.
Он ставит номерные точки транзакции в базе. Потом роллбэк точка1 и т.д.
И ты на Ctrl '+ C нажав 3 раза откатываешь 3 действия.
...
Забей.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework отмена изменений и навигационное свойство
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]