|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
Используется Telerik v. 2010. WPF, MVVM (Model-View-ViewModel) Один глобальный scope для всей модели: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Проблема начинается при такой последовательности: 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! Хотя надо сейчас сохранить только измененные данные пациента! Как вы решаете эти вопросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 14:04 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
_andrews_., andrewsQ2: Похоже что использование одного глобалоьного контекста является ошибкой? Это очень большая ошибка. Посмотрите шаблон Unit of Work, контекст EF как раз его и реализует. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 14:28 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
Lelouch, спасибо, покопаю в этом направлении. А есть какое-то решение для Telerik OA? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 15:51 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
Да Unit of Work даже много для этой задачи, достаточно почитать про идеологию IoC. А какой DI контейнер вкорячить, дело десятое. Для начала за глаза хватит обычного dependency resolver, можно взять готовый IDependencyResolver Interface . ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 15:57 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
_andrews_.При запуске приложения я загружаю из базы много разных данных..Корень зла. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 16:18 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
_andrews_.Lelouch, спасибо, покопаю в этом направлении. А есть какое-то решение для Telerik OA?Да наверняка есть. Надо просто потратить немного времени на чтение документации . ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 16:28 |
|
Как сохранить в базу только то, что нужно?
|
|||
---|---|---|---|
#18+
Telerik OpenAccess ORM: CRUD Operations ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2013, 16:32 |
|
|
start [/forum/topic.php?fid=17&fpage=26&tid=1350017]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 165ms |
0 / 0 |