Я разрабатываю приложение ASP.Net MVC5 с использованием Web API 5, OData и Entity Framework 6. Я создал репозитории и использовал инструменты Entity Framework Power Tools для генерации моего объекта моделей. Я отключил ленивую загрузку и создание прокси на моем DBContext. Ниже описано, как я пишу свои запросы LINQ в классах репозитория для возврата объектов с отношениями;ASP.Net WebAPI Ответ JSON не сериализует отношения сущностей
return repository
.Query(i => i.IsTransaction == true)
.Include(i => i.SubInventory)
.Include(c => c.Contact)
.OrderBy(q => q
.OrderBy(i => i.ItemFullCode))
.Select();
Далее в моем файле ODataConfig, который я установил;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
= Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling
= Newtonsoft.Json.PreserveReferencesHandling.Objects;
Вопрос, который я борюсь с, что мой метод Web API JSON ответ не содержит отношения, которые включены в LINQ запроса, но только основные данные сущности. Любая идея, что мне здесь не хватает?
Ниже приведен код моего основного объекта.
public partial class Item : Entity
{
public Item()
{
this.DocumentDatas = new List<DocumentData>();
this.ItemColorSizes = new List<ItemColorSize>();
this.ItemPrices = new List<ItemPrice>();
this.Items1 = new List<Item>();
this.ItemStocks = new List<ItemStock>();
this.SeasonalSaleDetails = new List<SeasonalSaleDetail>();
}
public string ItemFullCode { get; set; }
public string ItemCode { get; set; }
public string ItemName { get; set; }
public string ItemShortCode { get; set; }
public string LevelItemFullCode { get; set; }
public string SupplierCode { get; set; }
public string SubInvCode { get; set; }
public Nullable<decimal> PurchasePrice { get; set; }
public Nullable<decimal> SalePrice { get; set; }
public Nullable<System.DateTime> ArrivalDate { get; set; }
public string RefCode { get; set; }
public Nullable<decimal> TColumn { get; set; }
public Nullable<bool> TColumnByAmt { get; set; }
public Nullable<bool> IsGiftItem { get; set; }
public Nullable<bool> IsTransaction { get; set; }
public Nullable<bool> IsActive { get; set; }
public string CreatedBy { get; set; }
public Nullable<System.DateTime> CreatedDate { get; set; }
public string ModifiedBy { get; set; }
public Nullable<System.DateTime> ModifiedDate { get; set; }
public Contact Contact { get; set; }
public ICollection<DocumentData> DocumentDatas { get; set; }
public ICollection<ItemColorSize> ItemColorSizes { get; set; }
public ICollection<ItemPrice> ItemPrices { get; set; }
public ICollection<Item> Items1 { get; set; }
public Item Item1 { get; set; }
public SubInventory SubInventory { get; set; }
public ICollection<ItemStock> ItemStocks { get; set; }
public ICollection<SeasonalSaleDetail> SeasonalSaleDetails { get; set; }
}
Не могли бы вы дать нам представление о том, как выглядит определение 'repository'? Также вы могли бы подтвердить, что в коде, когда вы установите точку останова после этого возврата, все ожидаемые связанные объекты были десериализованы. Мое подозрение в том, что эта функция не применяется к отношениям сущностей. Мой опыт в этом заключался в том, что если бы у вас была рекурсивная структура, вам это нужно. Подобно типу, который ссылается на массив того же типа. – evanmcdonnal
Вы используете код первым? Можете ли вы отобразить свои сущности? – ESG
@evanmcdonnal Я использовал архитектуру, объясненную ниже ссылкой http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework- in-mvc/ Я установил точку прерывания и даже сериализовал возвращаемый объект из репозитория, содержащий все связанные объекты. Только на стороне клиента я не получаю JSON, состоящий из всех объектов. –