我有这两个类:
部门
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
函数,但存在FirstAsync
和Find
。
您不能使用第二个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();