2015-11-16 2 views
1

У меня есть таблица заказов, которую я хочу запросить. Одним из свойств является «UserId» и который превращается в свойство навигации для пользователя.Как включить только одно свойство при использовании 'expand'

Я могу запросить это, чтобы получить заказ и связанный с ним Пользователь. Однако мне не нужен весь пользовательский объект, а только свойство UserName.

Как мне построить этот запрос на ветру?

Что-то вроде:

let query = new breeze.EntityQuery() 
      .from("orders") 
      .expand("user.userName"); 

Я попытался это, но затем вернулся объекты не являются на самом деле объекты, но это не возвращают только имя пользователя:

let query = new breeze.EntityQuery() 
      .from("cases") 
      .select("field1, field2, user.userName"); 

есть ли другой способ сделать это ? Обратите внимание, что я использую EF на обратной стороне.

+0

В результате я создал представление для таблицы пользователя только с идентификатором и именем пользователя и связал это по мере необходимости. –

+1

Да, другим способом я это делаю, когда не могу изменить серверную сторону - это сделать отдельный проекционный запрос для создания столбца только для клиента в сущности. Вы можете выполнять итерации по заказам и сбрасывать проекционный запрос для каждого из них. From ('users'). Where ('userId', 'eq', order.userId) .select ('userName') 'и в. то 'order.userName = data.results [0] .userName' – Beartums

+0

Я называю это« засыпкой »:) –

ответ

1

Лучшее решение, которое я нашел для этого, - это создание «виртуального объекта», состоящего всего из двух полей, которые я хочу. Другими словами, у меня AspNetUsers как одна таблица с соответствующим объектом. А потом у меня есть второй код первый объект, который состоит только из Id, и UserName:

[Table("AspNetUsers")] 
public partial class User 
{ 
    [Key] 
    [Column("Id")] 
    public string AspNetUserId { get; set; } 

    [StringLength(256)] 
    public string UserName { get; set; } 
} 

можно затем использовать его в качестве отношения в других таблицах и включить его как просто еще один стол.