Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework DDD和实体框架-手动构建关联_Entity Framework_Domain Driven Design - Fatal编程技术网

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

Entity framework DDD和实体框架-手动构建关联,entity-framework,domain-driven-design,Entity Framework,Domain Driven Design,如果我们手动构建关联,我们是否必须在域模型中公开外键 例如,如果检索所有产品和所有类别,则手动生成Product.Categories属性的唯一方法是在模型中公开ProductCategory映射 如果有另一种选择,即通过EF快速加载不是一种选择,因为我有两个多关联要加载。您可以向项目中添加一个分部类产品,并使用IEnumerable属性类别甚至返回IEnumerable的方法扩展产品实体,我宁愿不这样做 通过这种方式,您可以自己实现类别检索。解决方案是使用Linq投影来检索相关键 var ta

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

例如,如果检索所有产品和所有类别,则手动生成Product.Categories属性的唯一方法是在模型中公开ProductCategory映射


如果有另一种选择,即通过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属性。我的观点和问题是,为了手动加载关联属性,是否有必要在域模型中公开外键/映射表,我认为答案可能是肯定的。