var language = navigator.languages && navigator.languages[0] || // Chrome / Firefox
navigator.language || // All browsers
navigator.userLanguage; // IE <= 10
console.log(language);
Попробуйте шаблон PWA https://github.com/StartPolymer/progressive-web-app-template
Я сам все понял. Ключ должен использовать SetResultTransformer () , передавая объект DistinctRootEntityResultTransformer в качестве параметра. Таким образом, запрос теперь выглядит следующим образом
Session.CreateCriteria(typeof (Node))
.SetFetchMode( "Etype", FetchMode.Join )
.SetFetchMode( "Etype.Properties", FetchMode.Join )
.SetFetchMode( "Etype.Properties.ListValues", FetchMode.Join )
.SetResultTransformer(new DistinctRootEntityResultTransformer());
Я нашел ответ на свои вопросы по следующим ссылкам:
http://www.mailinglistarchive.com/html/nhusers @ googlegroups.com / 2010-05 / msg00512.html
каждое отображение должно иметь ленивую загрузку с
в Node Map:
Map(x => x.EntityType).Not.LazyLoad();
в EnityType Map:
Map(x => x.Properties).Not.LazyLoad();
и так далее ...
Также см. NHibernate Eager, загружающий многоуровневые дочерние объекты для одноразовой загрузки
Добавлено:
Дополнительная информация по Sql N + 1:
SetResultTransformer с DistinctRootEntityResultTransformer будет работать только для основного объекта, но коллекции IList будут умножены.
У меня получилось что-то вроде этого:
HasMany(x => x.YourList).KeyColumn("ColumnName").Inverse().Not.LazyLoad().Fetch.Join()
Просто убедитесь, что вы выбрали свою сущность так, чтобы избежать дублирования из-за объединения:
session.CreateCriteria(typeof(T)).SetResultTransformer(Transformers.DistinctRootEntity).List<T>();