Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование объектов LINQ to SQL 
:(
    Опции темы
17dufa
Дата 26.4.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



Вот LINQ to SQL наплодил мне классов по табличкам.
чего хочется - передавать объекты этих классов в качестве Data Transfer Object. в принципе все хорошо, но есть одна бяка: DataContext запоминает те ссылочки, что нагенерил, и лазит их апдейтит.
придумал такую штуку, чтоб отвязаться - генерить копии тех объектов, что выдает Data Context и уже с ними работать. они как бы лишним функционалом не обладают. но копировать ручками задалбывает. соответственно вопрос - для подобных объектов есть какие-нить системные функции копирования? то есть вместо:
Код

Table1 instance = dataContext.Table1.Where(....);
Table1 copy = new Table1()
{
   ID = instance.ID,
   Name = instance.Name
};
return copy;

написать 
Код

Table1 instance = dataContext.Table1.Where(....);
Table1 copy = Copy<Table1>(instance);
return copy;

и при этом лично не писать этот метод Copy. И шоб метод Copy работал без рефлекшина. Можно такое?)

или как-то по-подругому от DataContext отвязаться можно?
PM MAIL   Вверх
KelTron
Дата 26.4.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Не до конца понятна ситуация, чтобы ответить нужно больше информации.

Цитата(17dufa @  26.4.2010,  14:12 Найти цитируемый пост)
лазит их апдейтит.

Когда это происходит?
DataContext используется один для всех запросов или при каждом запросе создаётся новый?
Для какой цели это нужно?





--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Ram1reS
Дата 26.4.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 25.4.2008
Где: Москва

Репутация: 3
Всего: 5



Посмотрите например AutoMapper
--------------------
 
PM MAIL ICQ   Вверх
17dufa
Дата 26.4.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



KelTron, происходит понятное дело после SubmitChanges если были запросы на апдейт. DataContext обновляется раз в N минут, то есть для некоторых запросов он один и тотже. вариант на каждую бизнестранзакцию делать по одному DataContext не обсуждается: слишком мелкие у нас транзакции, повесим сервак постоянным созданием/уничтожением подключений.

для какой цели нужно что? отвязать? потому что влом создавать классы близнецы в качестве Data Transfer Object'ов. у нас ща крайне простое приложение, большинство действий описывается CRUD. вот я и хочу практически результаты селектов возвращать во внешний мир. сейчас получается немного стремно: дайте мне платежи клиента - выдал. допустим эти платежи интерфейс табличкой показал и чего-то замер. в этот момент кто-то взял и поправил эти платежи - как результат когда интерфейс проснеться и просчитает общую сумму платежей - получится значение отличающееся от того, чтоб просуммировать видимую в интерфейсе табличку. ну и подобные редко встречающиеся, но крайне засадные ошибки.

Это сообщение отредактировал(а) 17dufa - 26.4.2010, 17:43
PM MAIL   Вверх
KelTron
Дата 26.4.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Цитата(17dufa @  26.4.2010,  16:46 Найти цитируемый пост)
повесим сервак постоянным созданием/уничтожением подключений.

Ну во-первых есть такое понятие как пул подключений...при создании и удалении контекста, подключение не создаётся заново и не уничтожается, а берётся из пула и возвращается в него. Никуда сервак не будет вешаться.

Цитата(17dufa @  26.4.2010,  16:46 Найти цитируемый пост)
на каждую бизнестранзакцию делать по одному DataContext не обсуждается

И тем самым создаёте себе массу проблем:
- та, что уже озвучена
- конфликты параллельного доступа
- чем больше данных пропускается через контекст (т.е. чем дольше он живёт), тем он тормознее работает, отслеживая все эти изменения

Цитата(17dufa @  26.4.2010,  16:46 Найти цитируемый пост)
DataContext обновляется раз в N минут

Собственно эти N минут жизни будут вешать сервак сильнее чем постоянное создание контекста для каждого запроса.

Я думаю что использование для каждого запроса нового контекста подойдёт для решения проблемы лучше всего.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.