powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сохранить в базу только то, что нужно?
7 сообщений из 7, страница 1 из 1
Как сохранить в базу только то, что нужно?
    #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
Как сохранить в базу только то, что нужно?
    #38268323
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_andrews_.,

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

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

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

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


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