Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Entity и Detach()  [new]
stim24
Member

Откуда: Иркутск
Сообщений: 173
Добавляю данные в таблицы Skl_DocumentPrix и Skl_DocumentPrixNom
данные таблицы связаны.
DocumentPrix Table=new DocumentPrix();
Table.SchetF = cSchetF.Text;
Table.DateF=cDateF.Value;

            for (int i = 0; i < dataGridTov.RowCount; i++)
            {
                Skl_DocumentPrixNom n = new Skl_DocumentPrixNom();
                
                n.id_Nomenklatura=(int)dataGridTov.Rows[i].Cells["id_Nomenklatura"].Value ;
                n.CenaPos=(decimal)dataGridTov.Rows[i].Cells["CenaPos"].Value;
                
                Table.Skl_DocumentPrixNom.Add(n);

            }


           CData.Model.Skl_DocumentPrix.AddObject(Table);

            bool err = false;

            try
            {
                CData.Model.SaveChanges();
            }
            catch (Exception ex)
            {
                CMessage.Error("Ошибка:" + ex.Message + "   " + ex.InnerException.Message);
                CData.Model.Detach(Table);
                err = true;
            }
            finally
            {
            }


И проверяю на ошибки.
Если ошибка при добавлении то вызываю Detach() к измененным данным.
Но почему-то это срабатывает только для Table(DocumentPrix), а набор данных Table.DocumentPrixNom остается как его Detach сделать?
Иначе всегда при вызове SaveChanges() будет ошибка.
20 ноя 13, 11:05    [15159737]     Ответить | Цитировать Сообщить модератору
 Re: Entity и Detach()  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Продублирую How to undo the changes in Entity Framework 4.1 and later
20 ноя 13, 12:04    [15160327]     Ответить | Цитировать Сообщить модератору
 Re: Entity и Detach()  [new]
stim24
Member

Откуда: Иркутск
Сообщений: 173
там ничего не понял. Сделал так.
 try
            {
                CData.Model.SaveChanges();
                CData.Model.Refresh(RefreshMode.ClientWins, CData.Model.Skl_DocumentPrix);
            }
            catch (Exception ex)
            {
                CMessage.Error("Ошибка:" + ex.Message + "   " + ex.InnerException.Message);
                List<Skl_DocumentPrixNom> tt=new List<Skl_DocumentPrixNom>();
                foreach (Skl_DocumentPrixNom i in Table.Skl_DocumentPrixNom)
                {
                    tt.Add(i);
                }
                foreach (Skl_DocumentPrixNom i in tt)
                {
                    CData.Model.Detach(i);
                }
                CData.Model.Detach(Table);
                
                CData.Model.Refresh(RefreshMode.ClientWins, CData.Model.Skl_DocumentPrix);
                CData.Model.Refresh(RefreshMode.ClientWins, CData.Model.Skl_DocumentPrixNom);
                CData.Model.Refresh(RefreshMode.StoreWins, CData.Model.Skl_DocumentPrix);
                CData.Model.Refresh(RefreshMode.StoreWins, CData.Model.Skl_DocumentPrixNom);

                err = true;
            }

Вроде работает но верно ли?
21 ноя 13, 08:10    [15165907]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить