连接查询的条件表示

时间:2009-04-22 11:45:27

标签: c# nhibernate criteria

有两个班级

1个A类[属性:-aid,aname]

2 B级[属性:-bid,A,bname]

DropDownList ddlist;

ICriteria criteria = ActiveRecordMediator<B>.GetSessionFactoryHolder()
                     .CreateSession(typeof(B)).CreateCriteria(typeof(B))
                     .setFetchMode(“A”,FetchMode.JOIN);

ddlistToLet.DataSource = criteria.List();

ddlistToLet.DataTextField =“bname”;

ddlistToLet.DataValueField =“aid”;

ddlistToLet.DataBind();

我收到此错误

DataBinding:'B'不包含名为'aid'的属性。

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

使用条件时,NHibernate将返回二维结果数组。我认为下拉不能理解底层对象结构是什么。看看结果,你应该能够调整你的绑定。

答案 1 :(得分:0)

提供具有值的属性。

class B
{
  public A A { get; set;}
  public aid { get { return A.aid; } }
}

如果你不喜欢它,因为你不想改变你的类,那么你可以使用一个特殊的类来绑定到控件。

答案 2 :(得分:0)

将查询结果转换为更具“绑定友好”的对象:

public class MyDTO {
  public string BeeName { get; set; }
  public string AId { get; set; }
}

// .. (snip) ..

ICriteria criteria = ActiveRecordMediator<B>.GetSessionFactoryHolder()
  .CreateSession(typeof(B)).CreateCriteria(typeof(B))
  .CreateCriteria(“A”)
  .SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("bname", "BeeName"))
    .Add(Projections.Property("aid", "AId"))
  )
  .SetResultTransformer(Transformers.AliasToBean(typeof(MyDTO)));

IList<MyDTO> results = criteria.List<MyDTO>();