流畅的NHibernate - 将存储过程的结果映射到多个模型

时间:2011-02-15 18:17:24

标签: c# fluent-nhibernate

我正在尝试将存储过程的结果映射到包含其他模型的模型中多次。我不确定这是否可行,但想问一下这是否是一种有效的方法,或者是否更好地单独定义所有内容。

我的模型类看起来像这样:

public class ClientSummary {
    public virtual int Id { get; set; }
    public virtual int Client_ID { get; set; }
    public virtual string Client_Name { get; set; }
    public virtual string State { get; set; }
    public virtual EDITotal Totals { get; set; }
    public virtual EDITotal In_Totals { get; set; }
    public virtual EDITotal Out_Totals { get; set; }
    public virtual EDITotal Direct_Totals { get; set; }
    public virtual EDITotal CPN_Totals { get; set; }
}
public class EDITotal {
    public virtual int Count { get; set; }
    public virtual double Charges { get; set; }
    public virtual double StateSavings { get; set; }
    public virtual double PPOSavings { get; set; }
    public virtual float PPO_Pct_Bill { get; set; }
    public virtual float PPO_Pct_State { get; set; }
    public virtual int Unique_TaxIds { get; set; }
}

我不确定我的类地图在Fluent NHibernate中会是什么样子,或者如果有可能这样的话。我主要是想保持整洁,可重复使用。我相信我会有其他报告使用类似的指标。我是以正确的方式解决这个问题,还是我真的需要为我构建的每个报告定义一个完整的模型?这一切都发生在MVC Web应用程序中。

提前致谢!

1 个答案:

答案 0 :(得分:0)

是的,这确实是可能的,无论是对还是错,你都可以按照设置类的方式使用它。为此,您可以使用这样的映射器:

public class ClientSummaryMappingOverride : IAutoMappingOverride<ClientSummary>
{
    public void Override(AutoMapping<ClientSummary> mapping)
    {
        mapping.References(x => x.Totals, "Totals_id");
        mapping.References(x => x.In_Totals, "In_Totals_id");
        mapping.References(x => x.Out_Totals, "Out_Totals_id");
        mapping.References(x => x.Direct_Totals, "Direct_Totals_id");
        mapping.References(x => x.CPN_Totals, "CPN_Totals_id");
    }
}

配置好地图后,您只需确保存储过程或SQL查询返回带有相应“Totals_id”类型字段的ClientSummary记录。 NHibernate将获取这些ID并将它们映射到正确的数据(我相信Lazy Load,具体取决于您的约定或其他映射)。