【发布时间】:2021-12-02 06:23:51
【问题描述】:
我在 Entity Framework CodeFirst 中有一个数据模型。此数据模型包含一个 Contracts 实体,其中 SQL Server 中存在大约 50 万条记录。合同实体与其他实体直接或间接相关。
我现在有一个后端作业需要检查所有合同的条件,如果该条件评估为真,它必须对合同执行一些操作。问题是条件不是那么简单,可以放在某个 where 子句中。对合约的评估要求我们检查合约层次结构中几个对象的状态。对于数据库中合同总数的一小部分,条件评估为真。
这意味着我只需要在内存中加载少量合同,但要确定哪些合同,我需要评估所有合同,所以如果我不想评估数据库中的条件(对于例如,在存储过程中),似乎我需要将所有合同加载到内存中。
所以,似乎有 2 个非常次优的解决方案: 1)在存储过程中确定满足条件的合约的合约ID,然后从代码中仅获取这些合约。这意味着我们将逻辑放在我们的数据库中,这似乎首先违背了整个代码哲学。 2)在内存中获取所有合约(部分地,例如在500个样本中)并在代码中评估条件。这当然在性能方面不是很好。
我的问题是,有哪些替代方法可以解决这个问题?
【问题讨论】:
-
如果你把选择合约的规则放在这里,也许我们可以写一个你可以使用的linq查询。
-
我们无法为您做出此决定。我不确定你到底在问什么。
标签: sql-server performance entity-framework architecture