我有两个数据库表(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();
答案 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)