有两个班级
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'的属性。
如何解决这个问题?
答案 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>();