Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сохранить в базу только то, что нужно? / 7 сообщений из 7, страница 1 из 1
22.05.2013, 14:04
    #38268272
_andrews_.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
Используется Telerik v. 2010.
WPF, MVVM (Model-View-ViewModel)
Один глобальный scope для всей модели:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
static public IObjectScope GetNewObjectScope()
{
  Database db = Database();
  IObjectScope newScope = db.GetObjectScope();
 
  if(newScope != theObjectScopeProvider.myScope)
  { 
     newScope.FetchPlan.MaxDepth = 3;
     newScope.TransactionProperties.Concurrency = TransactionMode.OPTIMISTIC_NO_LOST_UPDATES;
   }
  returnnewScope;
}



Проблема начинается при такой последовательности:
1. Get dbObject1 from scope in Model.
2. Get dbObject2 from scope in Model .
3. Edit dbObject1 in ViewModel
4. Edit dbObject2 in ViewModel.
5. Commit dbObject1 in Model

Проблема на шаге 5. dbObject2 также сохраняется в базу. Но на шаге 5 я хочу сохранить изменения только для dbObject1.

Поэтому добавил дополнительные классы для каждой Entity:
object1
object2

и теперь алгоритм такой:
1. Get dbObject1 from scope in Model .
2. Copy all properties from dbObject1 to object1 in Model
3. Get dbObject2 from scope in Model .
4. Copy all properties from dbObject2 to object2 in Model
5. Edit object1 in ViewModel
6. Edit object2 in ViewModel
7. Copy all properties from object1 to dbObject1 in Model
8. Commit dbObject1

сейчас все работает ок. Изменения сохраняются только для dbObject1, а для dbObject2 - нет. Но есть подозрение что использование таких промежуточных классов не правильно.

Q1: Является ли нормальной практикой создание таких промежуточных классов во ViewModel как object1 и object2?

Или другой пример:
Я получил из базы весь список объектов dbObject1. Сделал изменения в некоторых Items. И сейчас хочу сохранить изменения только для первого Item. Но с одним глбальным Scope - изменения во всех Items будут закоммичены.

Q2: Похоже что использование одного глобалоьного контекста является ошибкой?

Все описаное выше - довольно стандартная работа любого приложения.

Теперь реальный пример:

При запуске приложения я загружаю из базы много разных данных.. Это настройки приложения, Список пацинтов , много других списков , с данными, которые использует каждый пациент (Например список Масок и т.д.) и много других разных данных .

Как это все лучше загружать? В одном глобальном scope (or context)? Или иметь отдельный scope для каждой Entity?

1. Настройки приложения могут быть изменены в любом месте программы - без сохранения в базу.
2. Пользователь может открыть форму с данными пацинта, отредактировать пациента и нажать Save.
3. Но при этом и сохраняется настройки, которые изменены в п. 1! А также все остальные данные которые были загружены под этим scope! Хотя надо сейчас сохранить только измененные данные пациента!

Как вы решаете эти вопросы?
...
Рейтинг: 0 / 0
22.05.2013, 14:28
    #38268323
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
_andrews_.,

andrewsQ2: Похоже что использование одного глобалоьного контекста является ошибкой?

Это очень большая ошибка. Посмотрите шаблон Unit of Work, контекст EF как раз его и реализует.
...
Рейтинг: 0 / 0
22.05.2013, 15:51
    #38268551
_andrews_.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
Lelouch,

спасибо, покопаю в этом направлении.
А есть какое-то решение для Telerik OA?
...
Рейтинг: 0 / 0
22.05.2013, 15:57
    #38268567
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
Да Unit of Work даже много для этой задачи, достаточно почитать про идеологию IoC. А какой DI контейнер вкорячить, дело десятое. Для начала за глаза хватит обычного dependency resolver, можно взять готовый IDependencyResolver Interface .
...
Рейтинг: 0 / 0
22.05.2013, 16:18
    #38268625
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
_andrews_.При запуске приложения я загружаю из базы много разных данных..Корень зла.
...
Рейтинг: 0 / 0
22.05.2013, 16:28
    #38268650
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
_andrews_.Lelouch,

спасибо, покопаю в этом направлении.
А есть какое-то решение для Telerik OA?Да наверняка есть. Надо просто потратить немного времени на чтение документации .
...
Рейтинг: 0 / 0
22.05.2013, 16:32
    #38268655
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить в базу только то, что нужно?
Telerik OpenAccess ORM: CRUD Operations
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сохранить в базу только то, что нужно? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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