gpt4 book ai didi

c# - 如何对 OwnsMany 集合进行分页?

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:28 25 4
gpt4 key购买 nike

假设我有一个用户域实体。我想通过(指纹)一组属性(如 IP、电子邮件、电话、用户代理)来识别此用户。现在,由于 DDD 原则指纹不能是实体,因此我将其定义为 ValueObject。每次当用户尝试进行交易时,我都会查找匹配的指纹以将用户与请求相关联。

Ef 核心建议我们对 ValueObject 使用 OwnsMany()。我的问题是,这个拥有实体的集合是在没有任何分页的情况下立即加载的。我可能每页加载 100 个用户,每个用户可能有数百个指纹,因为每次 IP 或用户代理更改时我都必须创建一个新的。

我的问题是

  1. 有没有办法对这些指纹进行分页?我做不到,因为存储库仅对聚合根有约束。

  2. 当对象超过 1k 时,我真的可以使用 OwnsMany ValueObjects 吗?

  3. 如果没有,我该如何解决这个问题?

最佳答案

我不知道你的整个领域模型,所以我假设 User 是一个实体并包含 Fingerprints 的集合是有原因的。

Each time when a user tries to make a transaction I make a lookup for a matching fingerprint to associate a user with the request.

您不应该将数据库中的所有记录加载到您的应用程序内存中。据我了解,当 User 进行交易时,您真正需要的不是所有指纹,而是只有匹配的指纹。一种解决方案是在从数据库加载对象时正确准备对象。不要加载所有 Fingerprints,而只加载您感兴趣的指纹。您可以在 User 类中为它创建另一个属性。在您的基础架构层中编写 Linq 查询或 SQL 选择。

此解决方案可能会导致另一个问题。每次添加新的 Fingerprint 时,您的 User 类中都会有不需要的冗余属性。当您添加新的 Fingerprint 时,此属性不会自动更新。如果您对此感到不舒服,我建议您将读写模型分开。您可以使用战术 DDD 模式进行保存,但可能不需要它们进行简单的读取。

关于c# - 如何对 OwnsMany 集合进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57955950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com