nhibernate внутреннее объединение таблицы без свойства в классе - PullRequest
0 голосов
/ 23 ноября 2010

у меня есть следующая модель:

public class FlatMap : ClassMap<Flat>
    {
        public FlatMap()
        {
            Id(m => m.FlatID).GeneratedBy.Identity();
            Map(m => m.Name);
            Map(m => m.Notes);
            Map(m => m.Released);
        }

    } 
public class BuildingMap : ClassMap<Building>
{
    public BuildingMap()
    {
        Id(i => i.BuildingID).GeneratedBy.Identity();
        Map(m => m.Name);
        HasMany<Flat>(m => m.Flats).Cascade.All().KeyColumn("BuildingID").Not.LazyLoad();
    }
}

public class ContractMap : ClassMap<Contract>
    {
        public ContractMap()
        {
            Id(m => m.ContractID).GeneratedBy.Identity();
            Map(m => m.Amount);
            Map(m => m.BeginIn);
            Map(m => m.EndIn);
            References(m => m.RentedFlat);
        }
    }

как мне сделать следующий запрос, используя свободный nhibernate?

Select * From Contract 
Inner Join Flat On Contract.RentedFlatID = Flat.ID
Inner Join Building On Building.BuildingID = Flat.BuildingID
Where Building.BuildingID = @p0

особенно там нет упоминаний от квартиры до здания ?? и я не хочу, чтобы это было!

конечно ссылка, о которой я говорю, чтобы иметь возможность сделать что-то подобное

var criteria = session.CreateCriteria<Contract>().CreateCriteria ("RentedFlat").CreateCriteria ("Building"/*there is no such property in Flat class*/);

1 Ответ

0 голосов
/ 24 ноября 2010

Я решил проблему, но не так, как я думаю, это хорошо. но я буду делать это как ответ, пока кто-нибудь не предоставит мне лучшее решение.

Я добавил свойство BuildingID к классу Flat и изменил класс отображения на:

Map(m => m.BuildingID);

Теперь я могу сделать следующий запрос:

   criteria.CreateCriteria("RentedFlat")
           .Add(Restrictions.Eq("BuildingID", selectedBuilding.BuildingID));
...