Я использую DBContext и имею два класса, свойства которых являются виртуальными. Я могу видеть в отладчике, что я получаю прокси-объект, когда я запрашиваю контекст. Однако, когда я пытаюсь добавить к нему, свойство collection все еще имеет значение null. Я думал, что прокси обеспечит инициализацию коллекции.Почему мой код Entity Framework Code First proxy null и почему я не могу его установить?
Поскольку мой объект Poco может использоваться вне ее контекста данных, я добавил чек на коллекции является нулевым в конструкторе и создать его при необходимости:
public class DanceStyle
{
public DanceStyle()
{
if (DanceEvents == null)
{
DanceEvents = new Collection<DanceEvent>();
}
}
...
public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
Это работает вне контекста данных, но если Я извлекаю объект с помощью запроса, хотя тест является истинным, когда я пытаюсь его установить, я получаю следующее исключение: «Свойство« DanceEvents »в типе« DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 »не может быть установлено, поскольку коллекция уже настроена на EntityCollection. '
Я вижу, что это null, и я не могу добавить к нему, но я также не могу установить его в коллекции, потому что прокси говорит, что он уже установлен. Поэтому я не могу его использовать. Я смущен.
Вот класс DanceEvent:
public class DanceEvent
{
public DanceEvent()
{
if (DanceStyles == null)
{
DanceStyles = new Collection<DanceStyle>();
}
}
...
public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
Я опустил другие свойства значение типа из кода выше. У меня нет других сопоставлений для этих классов в классе контекста.
Это еще один способ сделать это, но он не объясняет мой комментарий: «Это работает вне контекста данных, но если я получаю объект с использованием запроса, хотя тест верен, когда я пытаюсь его установить, я получить следующее исключение: «Свойство« DanceEvents »в типе« DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 »не может быть установлено, поскольку коллекция уже установлена в EntityCollection. ' Я вижу, что это null, и я не могу добавить к нему, но я не могу установить его в коллекцию, потому что прокси говорит, что он уже установлен, поэтому я не могу его использовать. Я смущен ». –
Я не могу воспроизвести то, что вы описываете. По моему опыту, когда объект создается как прокси-сервер (либо в результате его возврата по запросу, либо с использованием метода DbSet.Create), его свойства коллекции создаются с объектами EntityCollection. Вам никогда не придется устанавливать эти свойства - просто добавьте/удалите из них объекты. – Pando
Возможно, поведение изменилось с тех пор, как я написал свой вопрос 2 года назад. –