如何加快基于密钥获取多个对象的查询?
例如(原谅我做出的例子),我说SQL Server中有多个表 Paper , Document 和 File 。每个文件记录都有一个文件" parent"每个文件记录都有一篇论文"父母"。一篇论文可能有多个文档,因此最终会有多个与该论文相关的文件。
论文表
int Paper_Key - PK
varchar Paper_Name
文件表
int Document_Key - PK
int Paper_Key
varchar Doc_Name
文件表
int File_Key - PK
int Document_Key
从文件级别来说,我们要检索文档和与特定文件关联的文件(所有这些表中都有数百万行)。
我最初的想法是将我的工作单元模式与我的通用存储库一起使用,并按键顺序检索每条记录。
服务方法
public MyViewModel GetFileWithDetails(int fileId)
{
File file = _unitOfWork.FileRepository.GetById(fileId);
Document doc = _unitOfWork.DocumentRepository.GetById(file.Document_Key);
Paper paper = _unitOfWork.PaperRepository.GetById(doc.Paper_Key);
var model = new MyViewModel
{
FileKey = file.File_Key,
// etc etc
}
return model;
}
通用存储库方法
internal MyDBEntities context;
internal DbSet<TEntity> dbSet;
public GenericRepository(MyDBEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public TEntity GetById(object id)
{
return dbSet.Find(id);
}
有没有办法更快地执行此查询?我对大多数其他页面使用相同的模式(详细信息,列表),但是从多个表中选择似乎需要更多的指数 - 特别是因为每个查询都必须等待前一个结果能够执行。
修改 遗憾的是,表之间没有关系。只有钥匙。我要求绘制关系,但由于空值或某些东西,SQL不允许.....我不负责表格。
答案 0 :(得分:1)
使用Include方法执行连接多个表的单个查询。
没有人说存储库不能考虑其他数据类型,只需选择中心对象并将该方法放在继承通用基础存储库的存储库中。
答案 1 :(得分:0)
尝试使用.Include
带回相关实体。