powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] Вопрос про слияние
10 сообщений из 10, страница 1 из 1
[NHibernate] Вопрос про слияние
    #35858708
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Есть много таблиц с автоинкрементным ключом. Они отображаются на классы, имеющие общий базовый
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class DomainObject<T>
{
  public T Id { get; protected set; }
}
class ConcreteEntity : DomainObject<long>
{
  // Properties....
  public string Property1 { get; set; }
  public string Property2 { get; set; }
  // ...
  public string PropertyN { get; set; }
}
Задача стоит такая. На входе имеем значение ключа, соответствующего существующей записи, и transient объект типа ConcreteEntity, у которого все свойства проинициализированы. Кроме ключа, разумеется.

Нужно эти свойства перенести в существующую запись базы данных. Глупый вариант типа загрузить в сеанс объект по ключу и скопировать вручную все свойства из существующего объекта мне не подходит.

Проблема в том, что я не могу применить ни SaveOrUpdate (то есть могу, но создастся новая запись), ни Merge к transient объекту, поскольку для него нельзя явно задать значение ключа из-за protected set . По условию задачи убирать protected нельзя.
В Entity Framework для таких целей есть ApplyPropertyChanges. А что делать в NHibernate?

Спасибо.

PS. Пытаюсь совместить ASP.NET MVC и NHibernate. Насколько я понял, хоть MVC и использует рефлексию, но значения protected-свойств не устанавливает в сценарии "Edit". Может это как-то исправимо?
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35863741
b0ltun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А сразу использовать persistent object почему нельзя?
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35864190
Stas Tristan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри в сторону S#arp Architecture: ASP.NET MVC with NHibernate
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35867071
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что мне приходит извне transient объект без ключа и отдельно ключ, так что сразу сделать его persistent я не могу, поскольку для SaveOrUpdate нужно, чтобы ключ был задан, а он protected

Про Sharp Architecture знаю давно, спасибо, что напомнили.
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35867234
b0ltun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну тогда как вариант рефлексия :)
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35868051
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рефлексия в прикладном коде не катит, увы. Это ничем не лучше, чем убрать protected. Или докинуть к ConcreteEntity метод для изменения ключа. Это все не годится.

Тут мне подкинули ещё мысль использовать прокси. Идейно понятно, но как в дотнете это делается культурно я не знаю. Может тут кто посоветует?
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35874245
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С прокси ничего не получилось. Если подсунуть в сессию прокси, переопределяющий ID, то NHibernate заметит, что объект принадлежит классу, который никуда не замаплен. Прокси-то строит класс динамически, и NHibernate про него ничего не знает.

Есть ещё варианты?

Спасибо
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35875610
b0ltun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду копирование свойств transient объекта в persistent с помощью рефлексии.
Метод типа ApplyPropertyChanges ему transient объект и он через рифлексию задает значения для всех полей persitent объекта.
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35875635
b0ltun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К стати судя по IL коду в Entity Framework (ApplyPropertyChanged) для этого рефлексия и используется
...
Рейтинг: 0 / 0
[NHibernate] Вопрос про слияние
    #35876355
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вводить наследование из-за одного поля и искать себе трудности на ровном месте?Наследование в бизнес-объектах и БД - нерекомендуемая практика.Введите интерфейс IDomainObject и уберите DomainObject
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [NHibernate] Вопрос про слияние
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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