Estoy usando DBContext y tengo dos clases cuyas propiedades son todas virtuales. Puedo ver en el depurador que obtengo un objeto proxy cuando consulto el contexto. Sin embargo, una propiedad de colección sigue siendo nula cuando intento agregarla. Pensé que el proxy garantizaría que la recopilación se inicializara.¿Por qué mi Entity Framework Code First First es nula y por qué no puedo configurarlo?
Debido a que mi objeto Poco se puede utilizar fuera de su contexto de datos, que añade un cheque por la colección siendo nula en el constructor y crearlo si es necesario:
public class DanceStyle
{
public DanceStyle()
{
if (DanceEvents == null)
{
DanceEvents = new Collection<DanceEvent>();
}
}
...
public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
que funciona fuera del contexto de datos, pero si Recupero un objeto usando una consulta, aunque la prueba es verdadera, cuando intento establecerlo, obtengo la siguiente excepción: 'La propiedad' DanceEvents 'en el tipo' DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 'no se puede establecer porque la colección ya está configurada en una EntityCollection. '
Veo que es nulo y no puedo agregarlo, pero tampoco puedo establecerlo en una colección porque el proxy dice que ya está configurado. Por lo tanto, no puedo usarlo. Estoy confundido.
Aquí es la clase DanceEvent:
public class DanceEvent
{
public DanceEvent()
{
if (DanceStyles == null)
{
DanceStyles = new Collection<DanceStyle>();
}
}
...
public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
he omitido las otras propiedades de tipo valor del código de seguridad. No tengo otras asignaciones para esas clases en la clase de contexto.
Esa es otra forma de hacerlo pero no explica mi comentario: "Eso funciona fuera del contexto de datos, pero si recupero un objeto usando una consulta, aunque la prueba es verdadera, cuando intento establecerla, Obtiene la siguiente excepción: 'La propiedad' DanceEvents 'en el tipo' DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 'no se puede establecer porque la colección ya está configurada en una EntityCollection.' Puedo ver que es nulo y no puedo agregar nada, pero tampoco puedo configurarlo en una colección porque el proxy dice que ya está configurado. Por lo tanto, no puedo usarlo. Estoy confundido ". –
No puedo reproducir lo que describes. En mi experiencia, cuando la entidad se instancia como un proxy (ya sea como resultado de que sea devuelto por una consulta, o si se usa el método DbSet.Create), sus propiedades de recopilación se instancian con objetos EntityCollection. Nunca debe tener que establecer estas propiedades, simplemente agregue o elimine entidades de ellas. – Pando
Es posible que el comportamiento haya cambiado desde que escribí mi pregunta hace 2 años. –