У меня есть ситуация, когда несколько потоков одновременно заполняют базу данных данными, извлеченными из веб-источников. Скребки должны периодически запускаться для сбора новых данных из различных источников.
Я новичок в использовании NHibernate и не совсем уверен, как лучше управлять сессиями.
Пример того, что делает каждый работник:
- Очистить сущность A из веб-источника
- Очистите каждую сущность B, связанную с A, и запишите, что A имеет другой B (то есть A имеет много B, B имеет один A)
Чтобы сохранить каждый B, сеансу нужна ссылка на A для создания B, а затем A необходимо добавить B в свой список детей. И A, и B сохраняются.
Существует иерархия такого рода дочерних родительских ситуаций AB, что A имеет много B, B имеет много C ... На уровне листьев A имеет тысячи конечных детей, поэтому нецелесообразно (?) держать сессию открытой до конца этой цепочки.
Альтернативой является запись идентификатора каждого родителя по цепочке (который может храниться независимо от сеанса) и загрузка в родительский элемент через этот идентификатор каждый раз, когда требуется создать дочерний элемент.
Я также понимаю, что ISession
должен быть однопоточным, поэтому мне понадобится как минимум один сеанс на поток, но кроме этого я действительно не уверен в лучшем подходе?
Любые идеи оценены, немного запутаны в данный момент!