【发布时间】:2020-05-25 14:13:54
【问题描述】:
假设我们有一个表Users 以ID 作为主键,并且用户有以下相关实体:
UserSubjects(SubjectId <PK>,UserId <FK>)
SubjectPapers(PaperId<PK>,SubjectId<FK>)
现在根据上表,出于安全原因,必须将userId 作为参数传递,以获取与用户相关的Subject 的所有SubjectPapers,而不仅仅是传递SubjectId。
以该方法为例:
public List<SubjectPaper> GetBySubject(int userId, int subjectId)
{
return _context.SubjectPapers
.Include(k => k.UserSubject)
.Where(k => k.SubjectId == subjectId && k.UserSubject.UserId == userId)
.ToList();
}
在上述方法中,用户必须包含在查询中,以验证他是否正在发出获取他的主题之一的请求。
如果SubjectPapers 理论上也有更多相关实体怎么办。存储UserId 外键是否会通过在两列(UserId 和 SubjectId)上添加非聚集索引来提高查询的性能?有没有副作用?还是有任何其他方法可以避免将父用户包含在每个相关实体中?任何建议表示赞赏。
【问题讨论】:
标签: sql sql-server ef-core-2.0