Вопрос, связанный со скоростью - (F) NHibernate - PullRequest
0 голосов
/ 19 августа 2011

У меня есть класс A, который содержит список Bs: IList.Это ассоциируется как с Bs (отображается как отношение многих ко многим).Ассоциация между As и Bs определяется внешним источником, который содержит Bs.Обратите внимание, что у меня есть копия Bs в моей базе данных по соображениям эффективности.Время от времени мне приходится запускать скрипт, который определяет все B, которые принадлежат конкретному A. Сценарий возвращает некоторые ключи, которые я могу использовать для получения B из репозитория.

Теперь каждый раз, когда я запускаю это обновление, я очищаю список B и получаю каждый B через свой репозиторий.Это очень неэффективно.Мне просто интересно, могу ли я что-нибудь сделать, чтобы сделать это быстрее?

Я попытался просто использовать список идентификаторов Bs здесь:

Свободная проблема Nhibernate

, но я не могу сохранить идентификаторы по какой-то необъяснимой причине, поэтому мне, возможно, придется снова использовать список «полностью унесенных» сущностей, что не проблема, но имеет дополнительные издержки на получение каждой сущности одна за другой черезхранилище.

Любая обратная связь будет очень признателен.Большое спасибо.

С наилучшими пожеланиями,

Кристиан

1 Ответ

1 голос
/ 19 августа 2011

для этого случая есть Session.Load

X.Blas.Add(Session.Load(bid));   // returns a proxy with initialized Id, almost the same as the id

и я думаю X.Blas.Clear(); будет лучше, чем X.Blas = new Iesi.Collections.Generic.HashedSet<B>();

Редактировать: для эффективной загрузки нескольких B вы также можете сделать

var blist = Session.QueryOver<B>()
    .Where(b => b.Id.IsIn(IdList))
    .List();

для дальнейшего сохранения работы вы можете

foreach(var bid in idList)
{
    var b = Session.Load(bid);
    if (!x.SetOfBs.Contains(b))
        x.SetOfBs.Add(b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...