考虑存储在 RavenDB 中的以下(简化的)域模型:
public abstract class PriceCalculation
{
// omitted for brevity
}
public class CostBasedPriceCalculation : PriceCalculation
{
public decimal Margin { get; private set; }
}
public class FixedPriceCalculation : PriceCalculation
{
public decimal FixedPrice { get; private set; }
}
public class ProductPricingStrategy
{
public string ProductId { get; private set; }
public PriceCalculation PriceCalculation { get; private set; }
}
存储的实体是ProductPricingStrategy
,我希望能够按价格计算类型以及价格计算特定变量查询集合。例如,我想获得一组基于成本的价格计算且边际小于 0.2 的所有产品定价策略。换句话说,我希望能够查询以下投影:
public class FlattenedProductPricingStrategy
{
public string PriceCalculationType { get; set; }
public decimal? FixedPrice { get; set; }
public decimal? Margin { get; set; }
}
蛮力方法是存储一个扁平的类层次结构,与投影更紧密地匹配,而不是直接存储域对象模型。在从 RavenDB 检索和持久化后,展平对象将映射到域对象。出于其他原因,我考虑过使用中间对象,例如能够处理映射类中的所有序列化问题以及具有用于重构的缓冲区,但是我已经远离它。有没有办法避免这个中间对象,直接根据原始对象模型创建索引?