2011-06-24 21 views
7

No estoy seguro acerca de las Propiedades de navegación en EF 4, por lo que le pido amablemente una explicación.Cómo determinar si la Propiedad de navegación en Entity Framework está configurada sin cargar los registros relacionados

Imaginemos esta hipótesis:

A)

Tengo dos entidades A y B con una relación N a N (muchos a muchos) y árbol tabla en mi base de datos A y B y una tabla de enlace ABcon dos claves externas.

En este escenario, EF crea una propiedad de navegación, llámenos X y también XReference.

B)

Tengo dos entidades A y B con una relación 1 a N (uno a muchos) y dos tabla en mi base de datos A y Bcon una clave externa.

En este escenario EF crear una propiedad de navegación le llaman Ypero no un YReference.

Ahora vamos a echar el escenario A y B y tratar de averiguar si hay alguna referencia de A en B:

Mi código para el Escenario:

A):

bool isA = a.XReference.EntityKey != null; 

no cargar registros B (correcto?)

B):

bool isA = a.B.Any(x => x.BId == AId); 

hago registros de carga B

Mis preguntas:

  • qué EF no crea un YReference y no puedo usar EntityKey propiedad en el escenario B.
  • En mi Código Escenario B , ¿Realmente no cargo ningún registro de B?
  • ¿Conoces un mejor enfoque para ejecutar esta consulta rápidamente?

Gracias a todos por su ayuda, espero que yo era capaz de dejar en claro :-)

Respuesta

1

¿Quiere decir:

// -to-one relationship 
entity.RelatedItemReference.IsLoaded 

// -to-many relationship 
entity.RelatedItems.IsLoaded 
+1

Hola, necesito usar las propiedades de navegación para ver si el contenido de A está en B. ¿Alguna idea? – GibboK

7

Aquí es una manera de comprobar si los registros relacionados de una entidad está cargada o no.

Por entidad donde tiene muchos registros relacionados con la entidad se puede comprobar como a continuación. (Uno a muchos)

myDbContext.Entry(MyEntity).Collection(x => x.NavigationalProperyName).IsLoaded 

Y si tienen sólo un registro relacionado con la entidad, a continuación, se puede comprobar como a continuación. (Relación uno a uno)

myDbContext.Entry(MyEntity).Reference(x => x.NavigationalProperyName).IsLoaded 
+2

Tenga en cuenta que esto solo funcionará si la entidad es una entidad rastreada. De lo contrario, no podrá ubicar la entidad en el contexto. –

Cuestiones relacionadas