У меня вопрос, когда дело доходит до отложенной загрузки.Для этого я использую LinQ для NHibernate, но я предполагаю, что он также будет применяться к другим методологиям LINQ to XX.
Представьте таблицу Пользователь со столбцом:
ID Имя АдресПароль (для этого примера: простой, не хэшированный)
И представьте Роль Таблица:
Идентификационное имя
И, конечно, есть многотаблица-ко-многим UserRole (с дополнительной информацией, такой как CreateDate).
Когда вы хотите получить только имена из ролей изопределенный пользователь вы можете сделать это через eager-loading с помощью следующего запроса:
var roles = session.Query<User>().FetchMany(u => u.UserRoles)
.ThenFetch(ur => ur.Role)
.Single(u => u.Id == userId)
.UserRoles.Select(ug => new { ug.Role.Name } );
Lazy-loading :
var roles = session.Query<User>().Single(u => u.Id == userId)
.UserRoles.Select(ug => new { ug.Role.Name } );
Преимущества быстрой загрузки: вместо 2 или 3 вызовов в базу данных каждый раз, когда у вас есть только один вызов Недостаток быстрой загрузки: даже если вы говорите, что ТОЛЬКО хотите вернуть имя, сам запросприведет к получению ВСЕХ свойств всех включенных таблиц из базы данных (включая конфиденциальную информациюкак в нашем примере паролей), и когда он окажется внутри вашего кода, он отфильтрует только имя.
Кто-нибудь может дать совет, какой из этих двух методов является наилучшим?Или есть какой-либо другой способ загрузки без загрузки всех свойств.Пожалуйста, никаких советов по использованию хранимых процедур.
Заранее спасибо,
Питер