DDD和实体框架 - 手动构建关联

时间:2011-02-23 17:51:27

标签: entity-framework domain-driven-design

如果我们手动构建我们的关联,我们是否必须在域模型中公开外键?

例如,如果我检索所有产品和所有类别,我可以手动构建Product.Categories属性的唯一方法是在模型中公开ProductCategory映射吗?

如果有替代方案,我宁愿不这样做(注意,通过EF的急切加载不是一个选项,因为我有两个很多关联要加载)。

2 个答案:

答案 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个查询。