【发布时间】:2017-10-05 22:10:56
【问题描述】:
如果我想在 EF7 查询中包含相关对象,这很简单:
var myThing = db.MyThings
.Include(t => t.RelatedThing)
.Where(t => t.SomeCondition == true)
.ToList();
另外,DbSet<T> 上还有一个不错的方法,可以很容易地通过键加载单个对象:
var myThing = db.MyThings.Find(thingId);
但现在我想通过其 ID 加载 myThing,以及它的 RelatedThing。不幸的是(并且可以理解).Find() 是DbSet<T> 的一种方法,而不是IQueryable<T>。显然我可以这样做:
var myThing = db.MyThings
.Include(t => t.RelatedThing)
.SingleOrDefault(t => t.MyThingId == thingId);
但我特别想使用.Find() 方法,因为它既好用又通用,而且我正在编写一个方法,该方法通常加载记录以及Expression<Func<T, object>> 指定的“包含”关系。
有什么建议吗?
【问题讨论】:
-
请原谅我的愚蠢问题,但我在 EF Core 中找不到
Find方法,它位于何处? -
@IvanStoev 它是
DbSet<T>类的一个方法,在Microsoft.EntityFrameworkCore命名空间中。确保您使用的是最新的预发布版本。 -
无论如何,我怀疑它是否可以用于预加载——在 EF6 中是不可能的。我想您将不得不使用类似 this 的东西,针对 EF Core 进行了调整。
-
@IvanStoev,这是个好建议。请你把它写下来作为答案吗?
-
@IvanStoev,很高兴在一个有答案的相关问题上找到你。