Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / отмена редактирования - кнопка Cancel при DataService / 6 сообщений из 6, страница 1 из 1
26.02.2010, 19:23
    #36491031
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отмена редактирования - кнопка Cancel при DataService
Народ, подскажите как правильно восстановить объект в себя при десериализации.
Проблема такая:
Пишу с 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
26.02.2010, 19:41
    #36491065
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отмена редактирования - кнопка Cancel при DataService
Скорее всего восстановить объект сам в себя невозможно.
Я вышел из положения так сделал класс, который возвращает сохраненную копию:

Код: 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
26.02.2010, 20:09
    #36491104
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отмена редактирования - кнопка Cancel при DataService
Однако меня это не спасло. http://sql.ru/forum/images/cry.gif

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

Я думаю выхода два:
1. Где-то сохраняться и восстанавливаться. Преимущество - нет нагрузки на сервер приложений и базу данных.
2. Перечитывать данные по этому объекту.
...
Рейтинг: 0 / 0
28.02.2010, 13:07
    #36493165
Lamer@fools.ua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отмена редактирования - кнопка Cancel при DataService
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
28.02.2010, 13:09
    #36493167
Lamer@fools.ua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отмена редактирования - кнопка Cancel при DataService
Lamer@fools.ua ,

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


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