在nhibernate中从实体对象加载集合

时间:2012-04-10 20:45:42

标签: c# nhibernate

我有一个名为Property的类,它包含Room个对象的集合

public class Property : EntityBase<Property>
    {
        public IList<Room> _rooms;

房间映射

public RoomMap()
        {
            Not.LazyLoad();
            Id(x => x.ID).Not.Nullable().UnsavedValue(int.MinValue).GeneratedBy.HiLo("100");
            Component(x => x.RoomDetails);
            Map(x => x.RoomType).CustomType<RoomType>();
            Component(x => x.Area);
            //HasMany(x => x.RentPriceDetails);
        }

物业地图

public PropertyMap()
        {
            Not.LazyLoad();
            Id(x=>x.ID).UnsavedValue(int.MinValue).Not.Nullable().GeneratedBy.HiLo("100");
            Component(x => x.Address);
            References(x => x.OwnerOfProperty);
            HasMany(x => x._rooms).Inverse().Cascade.All();
        }

我要做的是从选定的属性对象加载房间对象的集合。我用这个语法

var property = session.Query<Property>().FetchMany(x => x._rooms).First(x => x.ID == propertyId);

但只从数据库加载属性对象。房间被添加到数据库但是如何获得它们?如果我尝试访问property._rooms集合是空的。

由于

解决

问题在于反向声明。我不使用双向关联,所以我删除它并且它有效。

2 个答案:

答案 0 :(得分:1)

问题在于反向声明。我不使用双向关联,所以我删除它并且它有效。

答案 1 :(得分:0)

您可以尝试使用QueryOver而不是Ling Provider:

session.QueryOver<Property>()
    .Where(property => property.Id == propertyId)
    .Fetch(property => property.Rooms).Eager
    .TransformUsing(Transformers.DistinctRootEntity)
    .SingleOrDefault<Property>();