Учитывая следующие сокращенные DTO...
public class Order
{
public int ID { get; set; }
[References(typeof(Customer))]
public int? CustomerID { get; set; }
[Reference]
public List<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int ID { get; set; }
[References(typeof(Order))]
public int? OrderID { get; set; }
public string ProductID { get; set; }
[Reference]
public Product Product { get; set; }
}
... со следующим сервисом...
[Route("/orders", "GET")]
public class GetOrders : IReturn<IEnumerable<Order>>
{
public int? Page { get; set; }
public int? Show { get; set; }
}
public class OrderService : Service
{
public List<Order> Get(GetOrders request)
{
var query = Db.From<Order>()
.OrderByDescending(q => q.ID)
.Limit(request.Page.GetValueOrDefault(0) * request.Show.GetValueOrDefault(25), request.Show.GetValueOrDefault(25));
return Db.LoadSelect(query);
}
}
LoadSelect
будет правильно загружать ссылку Customer
, но не будет загружать ссылку OrderItems
. Есть ли способ заставить это? Я пытался бросить в Join
чтобы заставить его, но все, что я пытаюсь, кажется, либо бомбит из-за OrderBy и Limit, либо оно вернет весь набор данных, прежде чем ограничивать, что убивает производительность.
Я что-то упустил, или это не поддерживается?
Во-первых, я рекомендую использовать соглашение об Id
имен вместо ID
при использовании библиотек ServiceStack.
Это похоже на аналогичную проблему с ссылочными данными загрузки с LoadSelect
в SqlServer в запросе, который был разрешен в последнем выпуске v4.0. 34+, который теперь доступен в MyGet.
LoadSingleById
загрузил все ссылки должным образом, так что это, казалось, влияло наLoadSelect
.