NHibernate使用公共属性映射到实体

时间:2010-11-10 10:52:00

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

我正在使用IQueryable<>建立批处理查询。

我已成功使用视图来获取信息,因此IQueryable<>可以找到它,但在这种情况下,我无法弄清楚如何映射视图,因为它取决于属性而不是实体的ID。

说我有这个实体和映射:

public class Calculation 
{
    public virtual int Id { get; set; }
    public virtual Organisation Organisation { get; set; }
    public virtual Charge Charge { get; set; }
    public virtual TransactionTotal TransactionTotal { get; set; }
}

public class CalculationMap : ClassMap<Calculation>
{
    public CalculationMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        References(x => x.Organisation).Not.Nullable().UniqueKey("OC");
        References(x => x.Charge).Not.Nullable().UniqueKey("OC");
    }

这是我需要进入的课程:我正在使用视图向我提供每个组织和费用的总金额:

public class TransactionTotal 
{
    public virtual int Id { get; set; }
    public virtual Organisation Organisation { get; set; }
    public virtual Charge Charge { get; set; }
    public virtual decimal Amount { get; set; }        
}

public class TransactionTotalMap : ClassMap<TransactionTotal>
{
    public TransactionTotalMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Table("TransactionTotalsView");
        References(x => x.Charge).Not.Nullable();
        References(x => x.Organisation).Not.Nullable();
        Map(x => x.Amount).Precision(15).Scale(2).Not.Nullable();
    }
}

我使用过视图的其他地方我已成功使用HasOne(x => x.TransactionTotal);之类的映射,但在这种情况下,我需要告诉Nhibernate使用Organization和Charge属性作为键。

这甚至可能吗?如果是这样,我如何将TransactionTotal类映射到Calculation类?

编辑:我在@David:

的建议下在TransactionTotalMap中使用了CompositeId
CompositeId().KeyProperty(x => x.Organisation.Id).KeyProperty(x => x.Charge.Id);

我仍然坚持要在CalculationMap中放置什么。

1 个答案:

答案 0 :(得分:1)

在映射中使用CompositeId()方法