ASP.NET实体框架4导航实体未反映对数据库所做的更改

时间:2011-05-19 11:10:02

标签: asp.net entity-framework

我有两个数据库表(NEWS和NEWS_IMAGES),我已经为模型中的一对多关联生成了一个实体模型。

但是当我使用Navigation属性(NEWS_IMAGES)查询模型时,它不会返回任何最近的数据库插入,但如果我查询导航实体本身,那么我将获得所有最新的更改。

使用Navigation属性的第一种方法:

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

使用实际实体的第二种方法(返回所有最近的更改):

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

这是将记录插入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();

2 个答案:

答案 0 :(得分:3)

EF的默认行为是仅加载应用程序直接访问的实体(例如,新闻)。如果EF加载了所有相关实体(例如News_Images),您最终将加载的实体数量超过实际需要的数量。 您可以使用 eager loading 来使用 Include()方法加载相关实体。 在你的情况下,你将有这样的东西:

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

答案 1 :(得分:0)

您应该尝试使用以下功能:

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