首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系异步加载实体框架

关系异步加载实体框架
EN

Stack Overflow用户
提问于 2015-03-26 09:15:39
回答 1查看 469关注 0票数 0

我有两门课:

部门

代码语言:javascript
复制
public string Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }

帖子

代码语言:javascript
复制
public string Id{ get; set; }
public string Name { get; set; }
public string DepartmentId { get; set; }
public virtual Department Department { get; set; }

我正在尝试加载department

代码语言:javascript
复制
var dep = await _db.Departments.FindAsync("someid");

现在,我想获得包含异步的第一项:

代码语言:javascript
复制
var post = await dep.FirstAsync(s=>s.Name==name);

FirstAsync不存在吗?

第二个问题是实现自定义标识,并尝试用FindAsync加载用户,但它不存在。我使用:var user = await _db.Users.FindAsync(User.Identity.GetUserId()),它不包含FindAsync函数,但是FirstAsyncFind存在。

EN

回答 1

Stack Overflow用户

发布于 2016-02-17 08:14:31

不能使用第二个FirstAsync,因为您的对象是一个部门。您的第一个语句正在等待一个FindAsync方法。FindAsync方法启动一个类型为Task的任务。如果你等待这个任务,它会导致一个部门。因此,您可能需要为第一个语句指定一个确切的类型,以澄清以下问题:

代码语言:javascript
复制
Department dep = await _db.Departments.FindAsync("someid");

FirstAsync是一种用于IQueryables的方法。你的部门不是IQueryable,所以你不能使用它。如果您想要一个post (您的部门类有许多不同的集合),您将特别需要引用post集合。然而,Posts集合没有异步方法。您可以使用.AsQueryable()方法将其转换为可查询的,然后使用FindAsync。

但是,如果您只对该帖子感兴趣,您也可以将其写入一个LINQ查询中,并让数据库查找相关项:

代码语言:javascript
复制
string postName = "...";
string depId = "..."";

var postQuery =
    from post in _db.Posts
    where post.Name == postName && post.Department.Id == depId
    select post;

var post = postQuery.FirstAsync();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29274684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档