Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Откат изменений при использовании DataService / 5 сообщений из 5, страница 1 из 1
27.02.2010, 11:42
    #36491786
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений при использовании DataService
Может быть ранее я некорректно задавал вопрос. Попробую исправиться.

Использую EF, DataService, FW 4.0.
Имею две формы -мастер и детайл.

При загрузке мастер формы - делаю запрос и привязываю данные:

Код: plaintext
1.
2.
3.
            se = new skladEntities(new Uri(Properties.Settings.Default.ServiceString));
            firm_localBindingSource.DataSource = from ff in se.firm
                                                 where ff is firm_local 
                                                 select ff;

Затем при двойном клике на гриде вызываю детайл форму:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  FirmLocalDetail fld = new FirmLocalDetail();
  fld.firm_localBindingSource.DataSource = this.firm_localBindingSource.DataSource;
  frm_local.BeginEdit();

  if (fld.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                {
                    frm_local.CancelEdit();
                }

По моему замыслу в BeginEdit(); сущность должна сериализоваться и записываться в массив, а в CancelEdit(); - восстанавливаться.
Но как это правильно сделать не знаю. Есть набросок (добавление к частичному классу), но он не работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
    [Serializable]
    public abstract partial class firm
    {
        private byte[] originalState;
        private firm firmItem;

        public virtual void BeginEdit()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            firmItem = this;

            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, this);
                stream.Position = 0;
                originalState = new byte[stream.Length];
                // сохраняемся
                stream.Read(originalState, 0, (int)stream.Length);
            }
        }

        public virtual void CancelEdit()
        {
            if (originalState != null)
            {
                BinaryFormatter formatter = new BinaryFormatter();

                using (MemoryStream stream = new MemoryStream())
                {
                    stream.Write(originalState, 0, originalState.Length);
                    stream.Position = 0;
                    firmItem = this;
                    // восстанавливаемся
                    firmItem = (firm)formatter.Deserialize(stream);
                    originalState = null;
                }
            }
      }

Причина скорее всего в том, что сохранять и восстанавливать нужно не просто объект, а член списка - запроса (items), входящий в firm_localBindingSource.DataSource - IEnumerable<firm_local>. Но как это сделать не знаю.

Другие варианты - обновлять объект в существующей IEnumerable<firm_local>, но как это сделать? Да и удачный ли это вариант, если при отмене запрашивать данные?

Последний (самый дурацкий) вариант - при отмене обновлять запросом все данные.

Подскажите, неужели еще никто не работал с DataService?
...
Рейтинг: 0 / 0
01.03.2010, 18:04
    #36495524
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений при использовании DataService
Люди, неужели DataService никто еще не пользует?
...
Рейтинг: 0 / 0
01.03.2010, 18:18
    #36495553
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений при использовании DataService
vinvin,

все уже написали свои аналоги этого dataservice :)

так что кому из них теперь нужен DS)

ты ж понимаешь, не токо в MS такие умные,чтобы писать DS. можно и самому написать.
...
Рейтинг: 0 / 0
01.03.2010, 19:22
    #36495637
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений при использовании DataService
Спасибо, я C# только недавно юзаю.
Думал вдруг буду изобретать велосипед, а он уже есть. Оказывается велосипеда нет :(
Что ж буду изобретать свой. Так, где тут мое колесо...
...
Рейтинг: 0 / 0
01.03.2010, 19:42
    #36495663
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат изменений при использовании DataService
А все же, как заменить в IEnumerable<..> элемент.
Вот так не получается:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// восстанавливаю объект из буфера   
frm_local.CancelEdit();
// frm_local после этого смотрит на восстановленный объет
frm_local = (firm_local) frm_local.firmItem;


//а здесь не идет, пишет  
// The left-hand side of an assignment must be a variable, property or indexer

(firm_localDataGridView.CurrentRow.DataBoundItem as firm_local) =
                        frm_local;
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Откат изменений при использовании DataService / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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