0
問題是要獲得所有孩子的年齡都高於某個特定年齡的所有父母。期望的輸出結果還應包括子女列表及其父母。使用CreateQuery獲取其子集合的父對象
我有以下...
session.CreateQuery("select p, c from Parent as p left outer join p.Children as c where c.Age!= :age")
.SetParameter("age", somevalue);
但我收到以下錯誤:
Initializing[ns.Parent #18]-failed to lazily initialize a collection
of role: ns.Children, no session or session was closed
這是我的代碼:
class Parent {
public virtual int Id { get; set; }
public virtual IList<Child> Children { get; set; }
}
class Child {
public virtual int Id { get; set; }
public virtual int Age{ get; set; }
public virtual int ParentId { get; set; }
}
//the mapping
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
this.Id(t => t.Id);
this.HasMany(t => t.Child).Not.LazyLoad();
}
}
class ParentRepository : IParentRepository {
public IEnumerable<Parent> GetAll()
{
using (var session = _factory.OpenSession())
{
session.CreateQuery("select p, c from Parent as p left outer join p.Children as c where c.Age!= :age")
.SetParameter("age", somevalue);
return result.Distinct().ToArray();
}
}
}
//In a different class I call GetAll.
var data = parentRepository.GetAll();
//at the following line that i get the error.
IEnumerable<Contracts.Parent> parents = Mapper.Map<IEnumerable<ns.Parent>, IEnumerable<Contracts.Parent>>(data.ToArray());
我使用AutoMapper映射該對象到另一個類似的對象(Parent和Child)。 家長並在合同中命名空間中的孩子有完全相同的類型屬性
如錯誤消息所示,您正試圖在沒有打開的會話時調用'CreateQuery'。請確保您沒有關閉/處理會話,或者在您調用'CreateQuery'的地方發佈代碼。 –