当前位置: 首页 > 知识库问答 >
问题:

跟随DDD时使用EF跨多个聚合进行查询

党博超
2023-03-14

我们正在尝试遵循DDD的原则,同时开发我们的新应用程序。EF2.1用于持久化实体。

我们有很多场景,其中一个具有一个聚合的实体可能引用另一个聚合中的某些内容。例如,我的订单有一个客户的参考。在订单实体上,我们通过持有外键值来实现这一点。过于简化的模型。

public class Order
{
    DateTime OrderDate {get; set;}
    int CustomerId {get; set;}
}

public class Customer
{
    int Id {get
    string Name {get; set;}
}

我们不将Order对象上的任何导航属性包含到Customer对象,因为它模糊了聚合的边界

对于可能需要列出订单并包含下订单客户姓名的需求,团队首选使用EF和Linq查询数据,并使用Automapper映射到Dto以返回到客户端应用程序。没有navigation属性使得包含相关客户以检索名称非常困难。

虽然EF是伟大的持久化aggegrates使用它来查询数据的读取模型可能是复杂的,如果你没有导航属性.平原老SQL像Dapper在我看来会公平更容易(和可能更性能)这种类型的读取.团队正在提出斗争,不想使用SQL.这已经导致要么导航属性被添加在某些情况下或非常复杂的linq查询的实体。

有没有人对创建阅读模型应该采取的方法有强烈的看法?

共有1个答案

费朗
2023-03-14

我的订单有一个客户的参考。在订单实体上,我们通过持有外键值来实现这一点。

列出订单并包括下订单的客户的姓名

然后您需要使用订单获得客户。CustomerId

using(var ctx = new Context())
{
    var orderWithCustomerName = ctx
        .Order
        .Select(o => new OrderWithCustomerName
        {
            Order = o,
            Customer = ctx.Customer.First(c => c.Id == o.CustomerId)
        })
        .ToList();
}
 类似资料:
  • 本文向大家介绍使用MongoDB聚合按多个字段进行计数,包括了使用MongoDB聚合按多个字段进行计数的使用技巧和注意事项,需要的朋友参考一下 要按多个字段计数,请在MongoDB中使用$facet。在$facet处理在同一组输入文档的单级中的多个聚集的管道。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是要按多个字段计数的查询- 这将产

  • 是否有一种内置方法可以将两个不同的聚合函数应用于同一列,而无需多次调用? 示例数据帧: 语法上错误,但直觉上正确的做法是: 显然,Python不允许重复的键。是否有其他方式来表达输入到?也许元组列表会更好地工作,以允许多个函数应用于同一列?但是似乎只接受字典。 除了定义一个只应用其中两个函数的辅助函数之外,还有其他解决方法吗?无论如何,这将如何与聚合工作?)

  • 我试图计算许多列的行平均值。有人能解释一下为什么下面的代码只计算代码中两个变量(var_1和var_13)的平均值,而不是所有13列的平均值吗?

  • 问题内容: 我有一个包含多个包含整数(a1,a2,a3等)的字段的postgresql表。 我想一次跨多个列运行汇总函数(均值,标准差等)。(其中一些可能具有合理数量的空值,因此我不想只生成列平均值然后再对它们求平均值)。 我可以得到一组整数 但是我然后无法获取聚合函数以将此作为输入。 谁能给我任何有关如何使它工作的提示? 问题答案: 使用子查询,您可以使用所有行: 您还可以对行进行分组,例如:

  • 我有两个集合。如果集合2中的1号和2号在集合1中指定的一定范围内,我正在尝试将集合2的文档添加到集合1中。集合1中的FYI ObjectId和集合2中的ObjectId指的是两个不同的项目/产品,因此我无法在此id上加入两个集合。 集合1中的示例文档: 集合2中的示例文档: 我想要输出: 我认为使用管道的查找阶段可以工作。我的代码当前如下: 但是运行上面的没有给我输出。我做错了什么吗??

  • 我的应用程序已经构建了RESTAPI,我们计划使用GraphQL。我想知道是否有任何文档或在线参考资料介绍GraphQL Apollo与服务器端Spring的集成。请帮忙。