У меня есть отношение от одного до другого, как описано ниже. В некоторых частях бизнес-уровня есть запросы в таблице «Элемент», а в других - таблица «Клиент» (а также ее элементы). LazyLoading и ProxyCreation являются ложными, обработка эталонных циклов задана для игнорирования.Возврат подмножества объекта недвижимости для навигации
public class Client {
public virtual ICollection<Item> Items { get; set; }
public string Name {get;set;}
}
public class Item {
public virtual Client TheClient {get;set;}
public string ItemProp {get;set;}
// another 10 properties or so
}
myitems = dbContextScopeX.Items.Include(x => x.Client).ToList();
В представлении есть список предметов с указанием имени клиента (в моем примере). Ищу item.Client.Name Ultimate, однако, когда myitems
получает запросы/сериализовать содержит:
myitems.Client.Items
Если установить атрибут [JsonIgnore] на свойства элемента клиента он никогда не приходит через граф, который мне нужен это в других местах. Есть ли способ получить myItems.Client.Name без необходимости получать myitems.Client.Items
в запросе или не создавать анонимную проекцию для массива Item?
Вы пробовали проецировать анонимный тип, который исключает сбор элементов и сериализацию этого типа? –
Я упростил пример. В моем проекте элементы имеют другие свойства навигации, которые спускаются на пару уровней. Кроме того, я знаю, что могу использовать ClientID, который возвращается в класс Item и просматривает его, но я хотел посмотреть, есть ли более простой способ получить имя. – lucuma
Еще одна вещь, которую вы можете попробовать, - это просто обнулить коллекцию Items на клиенте (или установить ее в пустой список) перед сериализацией. Просто убедитесь, что вы не пытаетесь сделать что-либо еще с этим DbContext, прежде чем уничтожить его, поскольку отношения между сущностями будут все в порядке. Это звучит для меня как довольно хакерский и нецелесообразный способ достижения вашей цели, но это может сработать. –