Entity framework DDD和实体框架-手动构建关联
如果我们手动构建关联,我们是否必须在域模型中公开外键 例如,如果检索所有产品和所有类别,则手动生成Product.Categories属性的唯一方法是在模型中公开ProductCategory映射Entity framework DDD和实体框架-手动构建关联,entity-framework,domain-driven-design,Entity Framework,Domain Driven Design,如果我们手动构建关联,我们是否必须在域模型中公开外键 例如,如果检索所有产品和所有类别,则手动生成Product.Categories属性的唯一方法是在模型中公开ProductCategory映射 如果有另一种选择,即通过EF快速加载不是一种选择,因为我有两个多关联要加载。您可以向项目中添加一个分部类产品,并使用IEnumerable属性类别甚至返回IEnumerable的方法扩展产品实体,我宁愿不这样做 通过这种方式,您可以自己实现类别检索。解决方案是使用Linq投影来检索相关键 var ta
如果有另一种选择,即通过EF快速加载不是一种选择,因为我有两个多关联要加载。您可以向项目中添加一个分部类产品,并使用IEnumerable属性类别甚至返回IEnumerable的方法扩展产品实体,我宁愿不这样做
通过这种方式,您可以自己实现类别检索。解决方案是使用Linq投影来检索相关键
var tags = (from p in postRepo.GetAll()
from t in p.Tags
select new
{
PostId = p.Id,
Tag = t
}).Take(1000).ToList();
我将上述查询的结果粘贴到一个列表中,然后缓存该列表。当我加载一篇文章时,我可以从缓存中手动构建它的标签集合
这是我们现在不得不对一些协会采取的一种方法。虽然延迟加载非常方便,但不应将其用于视图
通过使用上述方法缓存公共关联,我们能够将以前由于延迟加载而发出59个查询的页面减少到只有6个查询。您打算如何公开关联?关联仍然存在,EF不会加载它们。默认情况下,不需要公开映射表,但我认为如果手动加载关联,则可能需要公开映射表。我不需要这样做。产品已具有Categories属性。我的观点和问题是,为了手动加载关联属性,是否有必要在域模型中公开外键/映射表,我认为答案可能是肯定的。