powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / отмена редактирования - кнопка Cancel при DataService
6 сообщений из 6, страница 1 из 1
отмена редактирования - кнопка Cancel при DataService
    #36491031
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите как правильно восстановить объект в себя при десериализации.
Проблема такая:
Пишу с EF c DataService - форма для редактирования записи.
При вызове формы я вызываю 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.
39.
40.
41.
42.
43.
44.
45.
[Serializable]
    class Class1
    {
         ....
        
        // для сохранения состояния
        private byte[] originalState;

        // ссылка на себя
        private Class1 selfClass1; 

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

            this.selfClass1 = this;

            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, this.selfClass1);
                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();

                this.selfClass1 = this;

                using (MemoryStream stream = new MemoryStream())
                {
                    stream.Write(originalState, 0, originalState.Length);
                    stream.Position = 0;
                    this.selfClass1 = (Class1)formatter.Deserialize(stream);

                    originalState = null;
                }

            }
        }
    }
...
Рейтинг: 0 / 0
отмена редактирования - кнопка Cancel при DataService
    #36491065
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее всего восстановить объект сам в себя невозможно.
Я вышел из положения так сделал класс, который возвращает сохраненную копию:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            
        public virtual Class1 ReturnOriginalClass()
        {
            this.selfClass1 = null;

            if (originalState != null)
            {
                BinaryFormatter formatter = new BinaryFormatter();

                using (MemoryStream stream = new MemoryStream())
                {
                    stream.Write(originalState, 0, originalState.Length);
                    stream.Position = 0;
                    this.selfClass1 = (Class1)formatter.Deserialize(stream);

                    originalState = null;
                }                
            }

            return this.selfClass1;
        }
...
Рейтинг: 0 / 0
отмена редактирования - кнопка Cancel при DataService
    #36491104
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однако меня это не спасло. http://sql.ru/forum/images/cry.gif

Как же все-таки сохранять и восстанавливать состояния объектов в EF при использовании DataService при редактировании?

Я думаю выхода два:
1. Где-то сохраняться и восстанавливаться. Преимущество - нет нагрузки на сервер приложений и базу данных.
2. Перечитывать данные по этому объекту.
...
Рейтинг: 0 / 0
отмена редактирования - кнопка Cancel при DataService
    #36493165
Фотография Lamer@fools.ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinvin ,

Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
[Serializable]
    class Class1
    {
         ....
        
        // для сохранения состояния
        [NonSerialized]
        private byte[] originalState;

        // ссылка на себя
        [NonSerialized]
        private Class1 selfClass1; 

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

            this.selfClass1 = this;

            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, this.selfClass1);
                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();

                this.selfClass1 = this;

                using (MemoryStream stream = new MemoryStream())
                {
                    stream.Write(originalState, 0, originalState.Length);
                    stream.Position = 0;
                    this.selfClass1 = (Class1)formatter.Deserialize(stream);

                    originalState = null;
                }

            }
        }
    }

?
...
Рейтинг: 0 / 0
отмена редактирования - кнопка Cancel при DataService
    #36493167
Фотография Lamer@fools.ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer@fools.ua ,

Но вообще подход, имхо, неправильный.
Потому что для такого подхода надо бы при восстановлении писать что-то вроде
Код: plaintext
this = this.selfClass;
:)
...
Рейтинг: 0 / 0
отмена редактирования - кнопка Cancel при DataService
    #36495537
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, действительно эти свойства серниализовать не надо. Но этот вопрос у меня вот откуда:
http://www.sql.ru/forum/actualthread.aspx?tid=738507
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / отмена редактирования - кнопка Cancel при DataService
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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