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



我有两个数据库表(NEWS和NEWS_IMAGES),我已经为它们生成了一个实体模型,并在模型中将它们进行了一对多关联。

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

使用导航属性的第一种方法:

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();

EF 的默认行为是仅加载应用程序直接访问的实体(例如新闻)。如果 EF 加载了所有相关实体(例如 News_Images),则最终加载的实体将超过实际需要的实体。您可以使用称为预先加载的东西来使用 Include() 方法加载相关实体。在您的情况下,您将拥有类似以下内容:

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

您应该尝试使用以下方法

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

最新更新