我正在使用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中使用了CompositeIdCompositeId().KeyProperty(x => x.Organisation.Id).KeyProperty(x => x.Charge.Id);
我仍然坚持要在CalculationMap中放置什么。