Почему EntityFramework заполняет мое поле NotMapped значением tra sh - PullRequest
0 голосов
/ 28 мая 2020

Здравствуйте, я получаю 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.

Позднее редактирование

Это изображение, на котором выглядит не отображаемое свойство элемента например: enter image description here

Я вычисляю IEnumerable<SomethingElse>, используя extension method:

public class Extension
{
    public static IEnumerable<SomethingElse> Compute(this IEnumerable<SomethingSomethingElse> someOthers){}
}

Имя типа поля IEnumerable<SomethingElse> это <Compute>d_6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...