我在Entity Framework CodeFirst中有一个数据模型。此数据模型包含一个Contracts实体,其中SQL Server中存在大约五十万条记录。合同实体与其他实体直接间接相关。
我现在有一个后端工作,需要检查条件的所有合同,如果该条件评估为真,它必须对合同采取一些行动。问题是条件不是那么简单,它可以放在一些where子句中。它对合同的评估要求我们检查合同层次结构中的几个对象的状态。对于数据库中合同总数的一小部分,条件评估为真。
这意味着我只需要在内存中加载少量合同,但要确定哪些合同,我需要评估所有合同,所以如果我不想评估数据库中的条件(例如,在存储过程中),似乎我需要在内存中加载所有合同。
因此,似乎有两个非常不理想的解决方案: 1)确定符合存储过程条件的合同的合同ID,然后从代码中仅获取这些合同。这意味着我们将逻辑放在我们的数据库中,这似乎首先违背了整个代码哲学。 2)在内存中获取所有合同(逐个部分,例如在500个样本中),并在代码中评估条件。这当然是表现明智不太好。
我的问题是,有哪些替代方法可以解决这个问题?
答案 0 :(得分:1)
对于给定的班级ComplexClass
,我们会有相应的ComplexClassInfo
。 Info类包含ComplexClass
的关键/重要属性。它通常也有子对象的成员。我们提供了足够的属性来为Info类提供一些通用的功能。 I.E.我们没有为特定数据查询量身定制的信息类。
对ComplexClassInfo
数据执行初始数据库提取,可以对其进行过滤。然后使用我们的复杂规则迭代ComplexClassInfo集合。使用结果集,我们查询数据库以实例化单个ComplexClass
对象。
答案 1 :(得分:0)
我对这两种方法的看法如下: