Вы пробовали вызывать fetch, прежде чем пропустить и взять
var result = _repostitory.All<MediaFile>()
.Fetch(mf => mf.Tags)
.Skip(10)
.Take(10);
Из того, что я помню, NH не может обрабатывать загрузку соединения с предельной нагрузкой с ограничениями в запросе (это связано с SQL, а не с NH).Это может работать с sub select.
** UPDATE
Рассмотрим этот пример
TableA
-------------
Id|Value
-------------
1 |Value1
2 |Value2
3 |Value3
TableB
-------------------------
ChildId|ParentId|ChildValue
-------------------------
1 | 1|Value1
2 | 1|Value2
3 | 2|Value3
4 | 2|Value4
5 | 3|Value5
6 | 3|ValueA
7 | 3|ValueA
8 | 3|ValueA
SELECT * FROM TableA LEFT JOIN TableB ON TableA.Id = TableB.ParentId
Result
--------------------------------------
Id|Value |ChildId|ParentId|ChildValue
--------------------------------------
1 |Value1|1 | 1|Value1
1 |Value1|2 | 1|Value2
2 |Value1|3 | 2|Value3
2 |Value1|4 | 2|Value4
3 |Value1|5 | 3|Value5
3 |Value1|6 | 3|ValueA
3 |Value1|7 | 3|ValueA
3 |Value1|8 | 3|ValueA
SELECT TOP 2 * FROM TableA LEFT JOIN TableB ON TableA.Id = TableB.ParentId
Result
--------------------------------------
Id|Value |ChildId|ParentId|ChildValue
--------------------------------------
1 |Value1|1 | 1|Value1
1 |Value1|2 | 1|Value2
Поэтому .Take (2) вернет один объект с двумя дочерними элементами (Id 1).Где вы хотели бы вернуть первые два объекта (Id 1,2) со своими детьми.