2011-05-19 9 views
7

Tengo dos tablas de base de datos (NOTICIAS y NOTICIAS_IMAGEN) para las que he producido un modelo de entidad con una asociación de uno a muchos en el modelo.Entidad de navegación de Ent.Mark 4 de ASP.NET que no refleja los cambios realizados en la base de datos

Sin embargo, cuando consulto el modelo utilizando la propiedad de navegación (NEWS_IMAGES), no devuelve ningún inserto de base de datos reciente, pero si consulto la entidad de navegación en sí, obtengo todos los cambios más recientes.

Primer método mediante navegación por la propiedad:

IEnumerable<NEWS_IMAGES> imgs = dal.NEWS.Where(n => n.NEWS_ID == NewsID).FirstOrDefault().NEWS_IMAGES; 

Segundo método que utiliza la entidad real (declaraciones de todos los cambios recientes):

IEnumerable<NEWS_IMAGES> imgs = dal.NEWS_IMAGES.Where(i => i.News_ID == NewsID) 

Este es el código que se inserta un registro a la entidad NEWS_IMAGES:

NEWS_IMAGES img = new NEWS_IMAGES 
      { 
       News_ID = newsID, 
       News_Image_Filename_Small = file_Sm, 
       News_Image_Filename_Medium = file_Med, 
       News_Image_Filename_Large = file_Lrge, 
       News_Image_Order = imgCnt + 1 
      }; 
      dal.NEWS_IMAGES.AddObject(img); 
      dal.SaveChanges(); 
+1

es 'imgs' en el primer ejemplo' null' o contiene elementos, pero no todos los que están en la base de datos? En el primer caso, y si no utiliza la carga diferida, debe incluir la propiedad de navegación: 'dal.NEWS.Include (" NEWS_IMAGES "). Donde ...'. En el segundo caso, no sé. es probable que se necesiten más detalles para rastrear el problema. – Slauma

+0

'imgs' no es nulo en ninguno de los escenarios. El problema es que no contiene ningún registro nuevo (cuando se usa la primera línea de código) que acaba de agregarse a la Base de datos. He intentado con la opción 'incluir', pero sigue siendo el mismo. La carga diferida está habilitada en el modelo principal de edmx. – mgTS

+0

Podría ser útil si pudiera mostrar las clases 'NEWS' y' NEWS_IMAGE' y el código de cómo insertar nuevas entidades en el contexto. – Slauma

Respuesta

0

Debería intentar usar lo siguiente que debería hacer el truco:

IEnumerable<NEWS_IMAGES> imgs = 
    dal.NEWS.Where(n => n.NEWS_ID == NewsID).SelectMany(i => i.NEWS_IMAGES) 
3

El comportamiento predeterminado de la EF es cargar sólo la entidad visitada directamente por la aplicación (por ejemplo, Noticias). Si el EF cargó todas las entidades relacionadas (por ejemplo, News_Images), terminará cargando más entidades de las que realmente necesita. Puede usar algo llamado ansioso de cargar para cargar entidades relacionadas usando el método Include(). En su caso, usted tendrá algo como esto:

var imgs= dal.NEWS.Include("NEWS_IMAGES").Where(n => n.NEWS_ID == NewsID).FirstOrDefault(); 
Cuestiones relacionadas