Вот запрос:EF6 асинхронные объекты объектов null?
using (var _context = GetCommonDataContext())
{
return await _context.AnswerSelectListEntries
.Include(asle => asle.Optional)
.OrderBy(asle => asle.DisplayOrder)
.Select(asle => new AnswerSelectListEntryDTO()
{
Id = asle.Id,
AnswerSelectListId = asle.AnswerSelectListId,
ShortAnswer = asle.ShortAnswer,
LongAnswer = asle.LongAnswer,
CounterpartyGroupId = asle.CounterpartyGroupId,
Optional = new AnswerDefDTO()
{
Id = asle.Optional.Id,
Name = asle.Optional.Name,
AnswerType = asle.Optional.AnswerType,
MultiplierAnswerType = asle.Optional.MultiplierAnswerType,
IntRangeLow = asle.Optional.IntRangeLow,
IntRangeHigh = asle.Optional.IntRangeHigh,
AnswerSelectListId = asle.Optional.AnswerSelectListId
},
AnswerDefId = asle.AnswerDefId,
PartyType = asle.PartyType,
DisplayOrder = asle.DisplayOrder
}).ToListAsync();
}
Я получаю сообщение об ошибке (брошенной из подзапроса), что Id, и AnswerType (это перечисление) не может быть приведен к их коллегам (Int и перечисления), потому что они ноль. Проблема в том, что они не являются нулевыми (и не являются нулевыми в db). Так или иначе, свойства asle.Optional устанавливаются в нуль (даже если они не являются нулевыми). Я предполагаю, что это имеет какое-то отношение к асинхронному, но не уверен в чем.
Фиксированный с помощью:
Optional = asle.Optional == null ? null : new AnswerDefDTO()...
Почему вы думаете, что это имеет какое-либо отношение к async? это один запрос - к какому SQL-запросу он переводится во время выполнения? Должен ли 'AnswerSelectListEntries' иметь' Факультативный'? Каково точное исключение? – peter
@peter Я не знаю, что это связано с необязательным. Я просто догадывался. AnswerSelectListEntry.optional не требуется, иногда оно равно null. Ожидается, что когда будет задано значение AnswerSelectListEntry.optional, будет также заполнен ответ ReplySelectListEntryDTO.Optional. – pQuestions123
да, поэтому я, безусловно, не специалист в EF6, чтобы узнать, какие исключения будут выбрасываться в какое время, но мне кажется, что вы относитесь к asle.Optional, как будто это никогда не может быть нулевым что ** может ** быть источником ошибки. Но поскольку я никогда не буду делать что-то подобное, мне никогда не приходилось сталкиваться с проблемой «Что произойдет, когда я получаю доступ к свойству включенной таблицы, которая на самом деле является нулевой?» - также способ, которым вы интерпретируете исключение, может быть предвзятым, поэтому исходное исключение может помочь. – peter