【发布时间】:2021-03-17 04:33:24
【问题描述】:
我有一个专辑类和两个与之相关的类,流派和艺术家。我使用即时加载来加载专辑对象和链接的实体:
var albums = db.Albums.Include(a => a.Artist).Include(a => a.Genre);
加载后,我尝试从数据集中的相册对象访问链接实体的属性,但导航属性为空
Album album = db.Albums.Find(id);
var name = album.Genre.Name;
name 为空。
我的问题是,在预先加载之后,专辑数据集中加载的对象是否包含对链接实体“艺术家”和“流派”的引用?
我不想激活延迟加载。
谢谢
【问题讨论】:
-
db.Albums.Find()执行单独的查询。使用Album album = albums.FirstOrDefault(a => a.Id == id);。然后,您可以访问album.Genre。 -
这是
db的同一个实例吗?一旦它们在更改跟踪器中,它们应该被链接。 -
@JeremyLakeman 仅当
albums查询实际加载到内存中时(这里不是这种情况)。调用albums.ToList()或albums.Load()应该可以解决问题。 -
对.. 错过了专辑仍然是 IQueryable。
标签: c# asp.net-mvc entity-framework eager-loading