У меня есть контроллер WebAPI, который должен вернуть коллекцию из базы данных, но мне также необходимо удалить некоторые свойства из некоторых объектов. Однако по какой-либо причине свойства, представляющие другой объект, возвращают значение null, за исключением , иногда, когда я перешагиваю код в режиме отладки. Я показал ответ JSon ниже, который показывает Спорт, HomeTeam и AwayTeam в нуль:EF иногда возвращает null для типов внешних ключей
Но когда я перешагнуть кода в режиме отладки я получаю ожидаемый результат:
Соответствующий метод контроллера следующим образом
public dynamic Get()
{
var allPicks = _db.Picks;
if (User.Identity.IsAuthenticated)
{
string userId = User.Identity.GetUserId();
var picks = _db.UnlockedPicks
.Include(p => p.SelectedPick.AwayTeam)
.Include(p => p.SelectedPick.HomeTeam)
.Include(p => p.SelectedPick.Sport)
.Where(p => p.UserId == userId);
var unlockedPicks = picks.Select(p => p.SelectedPick);
var otherPicks = allPicks.Except(unlockedPicks).Select(p => new
{
Analysis = "",
PickSummary = "",
Title = p.Title,
Id = p.Id,
Sport = p.Sport,
HomeTeam = p.HomeTeam,
AwayTeam = p.AwayTeam,
MatchTime = p.MatchTime,
PublishTime = p.PublishTime
});
return new
{
UnlockedPicks = unlockedPicks.OrderByDescending(p => p.MatchTime),
OtherPicks = otherPicks.OrderByDescending(p => p.MatchTime)
};
}
var publicPicks = allPicks.OrderByDescending(p => p.MatchTime).Select(p => new
{
Analysis = "",
PickSummary = "",
Title = p.Title,
Id = p.Id,
Sport = p.Sport,
HomeTeam = p.HomeTeam,
AwayTeam = p.AwayTeam,
MatchTime = p.MatchTime,
PublishTime = p.PublishTime
});
return new { UnlockedPicks = new Pick[0], OtherPicks = publicPicks };
}
Без Include()
он возвращал null каждый раз, но как я могу заставить его возвращать ожидаемый результат каждый раз?
Я попытался это, но тогда я получаю 'Ошибка получения значения из«AwayTeam»на«System.Data.Entity.DynamicProxies.Pick_300C9B9073E6C214AE564BA2A5A64098700CFA4A782832A5CEC6BD386AB3AA63'.' – mhcodner
Этот класс имеет некоторые свойства, которые не могут быть преобразованы в формат JSON. Вы никогда не должны возвращать весь объект. Вместо этого вы должны создать экземпляр модели представления своего объекта, а затем сериализовать его в json. Взгляните на эту ссылку http://stackoverflow.com/questions/18668617/json-net-error-getting-value-from-scopeid-on-system-net-ipaddress –
Я закончил работу над этим, просто сохранив Идентификатор разблокированных выборов и использование этого, чтобы вернуть список выбранных – mhcodner