Как оптимизировать вызовы ActiveRecord в ваших веб-приложениях ASP.NET MVC 2?Как оптимизировать вызовы Castle ActiveRecord
Я сижу перед моим проектом, и все в порядке, пока я не начну заполнять данные. Как и многие проекты, у меня есть структура данных, подобная этой:
Планета имеет много стран. В стране много штатов/провинций. В штате есть много городов. В городе много кварталов.
Ниже приведен пример замок ActiveRecord/NHibernate персистирующей бизнес-объекта
[ActiveRecord]
public class Country {
[Property]
public String CountryName { get; set; }
[HasMany(typeof(States))]
public IList<State> States { get; set; }
}
Теперь предположим, что вы хотите сделать невинный запрос, как получить список всех стран на планете
По умолчанию ActiveRecord/Nhibernate загрузит все дерево до самой последней зависимости.
Это может быть много вызовов SQL.
Хорошо, мы можем решить, что с отложенной загрузки [ActiveRecord(lazy=true)]
, но тогда, когда вы хотите сделать что-то аккуратно, как показано ниже
String text = "This country of " + country.CountryName + " has the following states:";
foreach(State s in country.States)
{
text += s.StateName + " ";
}
С ленивым ActiveRecord нагрузки приписывать каждый раз, когда он извлекает для s.StateName это еще один вызов SQL ,
Это слишком много вызовов sql.
Некоторые мои друзья предложили использовать методы ActiveRecordBase, такие как FindAll (критерии).
Но это заканчивается тем, что действительно уродливо и трудно читать со всеми этими Expression.Eq, а что нет.
А потом другие люди также предложили использовать что-то вроде HQL. HQL выглядит как LOT, как SQL.
Итак, самая чистая и оптимизированная версия - это простой и простой SQL-запрос. Это идет прямо к делу.
SELECT * FROM Countries //No loading of an entire tree of dependencies
SELECT * FROM States WHERE CountryId = @selectedId //1 call and you have all your states
В любом случае, сейчас я использую запросы SQL и хранимые процедуры для извлечения данных и ActiveRecord для сохранения/удаления объектов.
Пожалуйста, исправьте меня, если я ошибаюсь ...?
Спасибо, Оценка.
Глаз быка! Спасибо! – TchiYuan