Сопоставление NHibernate с сущностью с использованием общих свойств - PullRequest
3 голосов
/ 10 ноября 2010

Я использую 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.

1 Ответ

1 голос
/ 10 ноября 2010

используйте метод CompositeId() в вашем отображении

...