Я использую IQueryable <> для создания пакетных запросов.
Я успешно использовал представления для получения информации, чтобы IQueryable <> мог ее найти, но в этом случае я не могу понять, каксопоставить представление, поскольку оно зависит от свойств, а не от идентификатора объекта.
Скажем, у меня есть этот объект и отображение:
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");
}
Это класс, который мне нужен, чтобы получить там: IЯ использую представление, чтобы дать мне общую сумму по Организации и начислению:
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?
Редактировать: я использовал CompositeId в TransactionTotalMap, как предложено @David:
CompositeId().KeyProperty(x => x.Organisation.Id).KeyProperty(x => x.Charge.Id);
Я все еще застрял на том, что добавить в CalculationMap.