如果我们手动构建我们的关联,我们是否必须在域模型中公开外键?
例如,如果我检索所有产品和所有类别,我可以手动构建Product.Categories属性的唯一方法是在模型中公开ProductCategory映射吗?
如果有替代方案,我宁愿不这样做(注意,通过EF的急切加载不是一个选项,因为我有两个很多关联要加载)。
答案 0 :(得分:0)
您可以在项目中添加部分类“Product”,并使用IEnumerable<Category>
属性“Categories”扩展“Product”实体(或者甚至是返回IEnumerable<Category>
的方法)。
这样您就可以自己实现“类别”的检索。
答案 1 :(得分:0)
解决方案是使用Linq投影来检索相关的密钥。
var tags = (from p in postRepo.GetAll()
from t in p.Tags
select new
{
PostId = p.Id,
Tag = t
}).Take(1000).ToList();
我将上述查询的结果粘贴到List<KeyValuePair<Guid, Tag>>
中,然后缓存。当我加载帖子时,我可以从缓存中手动构建它的“标签”集合。
这是我们现在必须与许多协会合作的方法。虽然延迟加载非常方便,但恕我直言,它不应该与您的视图一起使用。
通过使用上述方法缓存公共关联,我们能够将以前发出59个查询(由于延迟加载)的页面减少到只有6个查询。