Pregunta

Para una parte del proyecto en el que estoy trabajando actualmente, tengo un conjunto de cuatro tablas para acciones distribuibles. Una tabla es la base abstracta para las otras tres, y cada tabla está representada en mi modelo de EF de la siguiente manera:

Modelo EF - Acciones http: // chris. charabaruk.com/system/files/images/EF+Model+Actions.png

Sin embargo, hay dos problemas a los que me enfrento actualmente con esto. El primer problema es que Actor (una referencia a un User ) y Subject (una referencia a una entidad de la clase asociada con cada tipo de action) son null en mis subclases, a pesar de que las columnas de la base de datos asociadas tienen claves válidas para las filas en sus tablas asociadas. Aunque puedo obtener las claves a través de ActorReference y SubjectReference , esto requiere, por supuesto, configurar un nuevo contexto EF y consultar los objetos referenciados (como Foo Reference.Value también es nulo).

El segundo problema es que el final recíproco de la relación entre las clases de acción concretas y sus clases de entidades relacionadas no siempre resulta nada. Por ejemplo, Task.RelatedActions , que debería proporcionarme todos los objetos TaskAction donde Subject se refiere al objeto de tarea en particular en el que RelatedActions < Se llama / code>, está totalmente desprovisto de objetos. Una vez más, existen filas válidas en la base de datos, Entity Framework simplemente no las pone en objetos y me los entrega.

¿Alguien sabe qué es lo que estoy haciendo mal y qué debo hacer para que funcione?

Actualización: Parece que ninguna de las propiedades de la relación está funcionando en mi modelo de entidad, en absoluto. WTF ...

¿Fue útil?

Solución

Creo que el problema que está experimentando aquí es que, de forma predeterminada, el EF no carga automáticamente las entidades relacionadas. Si carga una entidad, la recopilación o referencia a entidades relacionadas estará vacía a menos que realice una de las siguientes acciones:

1) Utilice la carga impaciente para recuperar su entidad principal y su entidad relacionada en una sola consulta. Para hacer esto, modifique su consulta agregando una llamada al método Include. En su muestra anterior, puede usar la siguiente consulta:

from a in context.Actions.Include("Actor") select a

Esto recuperaría cada una de las acciones con el método Actor relacionado.

2) Utilice la carga diferida explícita para recuperar la entidad relacionada cuando la necesite:

action1.ActorReference.Load()

En la versión de EF que se enviará con .Net 4.0, también tendrá la siguiente opción adicional:

3) Active la carga diferida implícita para que las entidades relacionadas se recuperarán automáticamente cuando haga referencia a la propiedad de navegación.

  • Danny
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top