C# 如何为自己的收藏分页?
假设我有一个用户域实体。我想通过(指纹)一组属性(如IP、电子邮件、电话、用户代理)来识别此用户。现在,因为根据DDD原则,指纹不能是实体,所以我将其定义为ValueObject。每次当用户尝试进行交易时,我都会查找匹配的指纹以将用户与请求关联 Ef core建议我们对ValueObjects使用C# 如何为自己的收藏分页?,c#,domain-driven-design,ef-core-2.2,C#,Domain Driven Design,Ef Core 2.2,假设我有一个用户域实体。我想通过(指纹)一组属性(如IP、电子邮件、电话、用户代理)来识别此用户。现在,因为根据DDD原则,指纹不能是实体,所以我将其定义为ValueObject。每次当用户尝试进行交易时,我都会查找匹配的指纹以将用户与请求关联 Ef core建议我们对ValueObjects使用OwnsMany()。我的问题是,这个拥有的实体集合会在没有任何分页的情况下立即加载。我可能每页加载100个用户,每个用户可能有数百个指纹,因为每次IP或用户代理更改时,我都必须创建一个新的指纹 我的问
OwnsMany()
。我的问题是,这个拥有的实体集合会在没有任何分页的情况下立即加载。我可能每页加载100个用户,每个用户可能有数百个指纹,因为每次IP或用户代理更改时,我都必须创建一个新的指纹
我的问题是
我不知道您的整个域模型,因此我假设
用户
是一个实体并包含指纹的集合
是有原因的
每次当用户尝试进行交易时,我都会查找匹配的指纹以将用户与请求关联
您不应该将数据库中的所有记录都加载到应用程序内存中。据我所知,当User
进行交易时,您真正需要的不是所有指纹,而是匹配的指纹。解决方案是在从数据库加载对象时正确准备对象。不要加载所有的指纹
,而只加载您感兴趣的指纹。您可以在用户类中为其创建另一个属性。在基础结构层中编写Linq查询或SQL选择
此解决方案可能会导致另一个问题。每次添加新的指纹
,您的用户
类中都会有您不需要的冗余属性。添加新的指纹时,此属性不会自动更新。如果你觉得不舒服,我建议你把你的读写模型分开。您可以使用战术DDD模式进行保存,但简单读取可能不需要它们。OwnsMany()
不适用于ValueObjects。它用于聚合——应该以原子方式加载和保存的实体图。