User(Contributor(和TaskType之间存在多对多关系。我只想将贡献者中有当前用户的TaskTypes分配给变量。显然,我可以使用实体框架的功能以某种方式做到这一点。但是怎么做呢?我使用asp.net核心3。
下面我尝试做它没有成功:
public IQueryable<TaskType> ContributedTaskTypes
{
get
{
// This code doesn't work!
return _dbContext.TaskTypes.Where(t => t.Contributors.Contains(c => c.UserId == CurrentUserId));
}
}
以下是该关系中涉及的所有模型的定义:
public class TaskType
{
public int Id { get; set; }
public string UserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public virtual List<Contribution> Contributors { get; set; }
}
public class Contribution
{
public int Id { get; set; }
public string UserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public int TaskTypeId { get; set; }
public TaskType TaskType { get; set; }
}
public class ApplicationUser : IdentityUser
{
public virtual List<Contribution> ContributedToTaskTypes { get; set; }
}
对于那些查询,在可以点到结果的地方进行查询总是最容易的。
以下是具有类似sql语法的查询
from row in _dbContext.Contribution
where row.UserId == CurrentUserId
select row.TaskType
通过选择行。TaskType而不仅仅是行,您可以得到正确的实体。
-
是否从DB中正确检索到
Contributors
属性?如果不是,则必须调用Include()
方法来加载/引用关系引用实体_dbContext.TaskTypes.Include(p=>p.Contributors).Where(..
更多:https://learn.microsoft.com/en-us/ef/core/querying/related-data
- 此外,如果EF核心表关系未正确定义,则应遵循此说明:https://www.entityframeworktutorial.net/efcore/configure-many-to-many-relationship-in-ef-core.aspx