Здравствуйте, я получаю IEnumerable<Something>
с помощью Entity Framework, и этот Something
имеет свойство IEnumerable<SomethingElse>
с атрибутом [NotMapped]
поверх него.
Почему Entity Framework заполняет это IEnumerable<SomethingElse>
поле с каким-то неизвестным объектом, который не является null
, но не может быть обработан с помощью Linq
, вызывая следующее исключение:
System.ArgumentNullException: 'Value cannot be null. (Parameter 'source')'
public class Something
{
[NotMapped]
public IEnumerable<SomethingElse> Items{get;set;}
}
public struct SomethingElse
{
//some fields
}
Вставка : Когда я вставляю список, некоторые элементы имеют поле NotMapped
null, а другие нет:
List<Something> toBeInserted=new List<Something>{ new Something{Items=null},new Something{Items=new[]{ new SomethingElse{}}};
//dbcontext insert the list....
Извлечение
List<Something>somethings=(await this.[SomeDBContext].Somethings).ToList();
Теперь при извлечении некоторые элементы имеют свойство NotMapped
null, как и должно быть, в то время как некоторые другие имеют это странное ненулевое значение IEnumerable<SomethingElse>d_6
, которое вызывает исключение при любом запросе Linq
:
var weirdElement=somethings.First();
weirdElement.Items.Count(); //throws
weirdElement.Items.Any();throws
PS
Я проверил это сообщение относительно вычисленных свойств, и в нем говорится:
Materialize the list when you fetch it from the database to resolve the computed properties
.
Это то, что я сделал. Выдаю (await this.DBContext.Somethings).ToList()
безрезультатно. У некоторых Something
свойство IEnumerable<SomethingElse>
по-прежнему не равно null.
Позднее редактирование
Это изображение, на котором выглядит не отображаемое свойство элемента например:
Я вычисляю IEnumerable<SomethingElse>
, используя extension method
:
public class Extension
{
public static IEnumerable<SomethingElse> Compute(this IEnumerable<SomethingSomethingElse> someOthers){}
}
Имя типа поля IEnumerable<SomethingElse>
это <Compute>d_6