.ToListAsync用于从EF Core中的数据库获取项目集合。很清楚但是,获得单个物品的正确方法是什么?如果可能,以异步方式。

public async static Task<Source> LoadEntityAsync(int sourceID)
{
    using (var db = new RPDBContext())
    {
        var sources =
            await
                db.Source
                    .Where(x => x.SourceID == sourceID)
                    .ToListAsync();
        // TODO that's like a hack:
        return sources.First();
    }
}

最佳答案

如果要使对象唯一,则应使用SingleOrDefaultAsync
如果从域限制中知道该对象是唯一的,或者通过主键访问该对象,则可以使用FirstOrDefaultAsync

var sources = await db.Source
            .Where(x => x.SourceID == sourceID)
            .SingleOrDefaultAsync();

您可以使用另一个重载并缩短查询
var sources = await db.Source
            .SingleOrDefaultAsync(x => x.SourceID == sourceID);

同样的规则适用于FirstOrDefaultAsync

如果要确保对象存在,只需删除OrDefault部分并使用SingleAsyncFirstAsync即可。

关于c# - Entity Framework 核心(7): load single entity by id,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35815557/

10-09 22:05