|
|
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Привет всем. Есть много таблиц с автоинкрементным ключом. Они отображаются на классы, имеющие общий базовый Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Нужно эти свойства перенести в существующую запись базы данных. Глупый вариант типа загрузить в сеанс объект по ключу и скопировать вручную все свойства из существующего объекта мне не подходит. Проблема в том, что я не могу применить ни SaveOrUpdate (то есть могу, но создастся новая запись), ни Merge к transient объекту, поскольку для него нельзя явно задать значение ключа из-за protected set . По условию задачи убирать protected нельзя. В Entity Framework для таких целей есть ApplyPropertyChanges. А что делать в NHibernate? Спасибо. PS. Пытаюсь совместить ASP.NET MVC и NHibernate. Насколько я понял, хоть MVC и использует рефлексию, но значения protected-свойств не устанавливает в сценарии "Edit". Может это как-то исправимо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2009, 22:16 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
А сразу использовать persistent object почему нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 08:52 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Посмотри в сторону S#arp Architecture: ASP.NET MVC with NHibernate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 11:41 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Дело в том, что мне приходит извне transient объект без ключа и отдельно ключ, так что сразу сделать его persistent я не могу, поскольку для SaveOrUpdate нужно, чтобы ключ был задан, а он protected Про Sharp Architecture знаю давно, спасибо, что напомнили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 12:09 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Ну тогда как вариант рефлексия :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 12:54 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Рефлексия в прикладном коде не катит, увы. Это ничем не лучше, чем убрать protected. Или докинуть к ConcreteEntity метод для изменения ключа. Это все не годится. Тут мне подкинули ещё мысль использовать прокси. Идейно понятно, но как в дотнете это делается культурно я не знаю. Может тут кто посоветует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 16:26 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
С прокси ничего не получилось. Если подсунуть в сессию прокси, переопределяющий ID, то NHibernate заметит, что объект принадлежит классу, который никуда не замаплен. Прокси-то строит класс динамически, и NHibernate про него ничего не знает. Есть ещё варианты? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:02 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду копирование свойств transient объекта в persistent с помощью рефлексии. Метод типа ApplyPropertyChanges ему transient объект и он через рифлексию задает значения для всех полей persitent объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 08:02 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
К стати судя по IL коду в Entity Framework (ApplyPropertyChanged) для этого рефлексия и используется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 08:31 |
|
||
|
[NHibernate] Вопрос про слияние
|
|||
|---|---|---|---|
|
#18+
А зачем вводить наследование из-за одного поля и искать себе трудности на ровном месте?Наследование в бизнес-объектах и БД - нерекомендуемая практика.Введите интерфейс IDomainObject и уберите DomainObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:38 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=73&tid=1351895]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 379ms |

| 0 / 0 |
