关系异步加载实体框架



我有这两个类:

部门

public string Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }

张贴

public string Id{ get; set; }
public string Name { get; set; }
public string DepartmentId { get; set; }
public virtual Department Department { get; set; }

我正在尝试用加载department

var dep = await _db.Departments.FindAsync("someid");

现在我想用async获得第一个项目:

var post = await dep.FirstAsync(s=>s.Name==name);

FirstAsync不存在?

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

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

Department dep = await _db.Departments.FindAsync("someid");

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

然而,如果你只对这篇文章感兴趣,你也可以在一个LINQ查询中写它,并让数据库找到相关的项目:

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();

相关内容

  • 没有找到相关文章

最新更新