我在C#上使用Castle ActiveRecord作为我的项目,我有一个奇怪的错误。我想通过ActiveRecord方法从一个指定的列中检索数据,以便我可以将它放入comboBox。
我使用此方法进行简单查询:
...
using Castle.ActiveRecord.Queries;
...
public static Lable[] ReturnAllLableNames()
{
SimpleQuery<Lable> q = new SimpleQuery<Lable>(typeof(Lable), @"
Select LableName
from Lable
");
return q.Execute();
}
其中Lable是一个表,也是我项目中的一个类,它有LableID和LableName列。
我第一次构建并尝试运行我的项目时,VS要求我指定ActiveRecordBaseQuery.cs文件,当然我没有,所以我按下“取消”并重建了我的项目。下次出现以下错误时:
Could not perform ExecuteQuery for Lable
我没有找到我应该搜索错误的线索,因为我使用了SimpleQuery示例中的代码,并添加了所有必要的引用。
第二个想法是,还有其他方法可以使用Castle AR方法检索一个指定的列吗?
我很高兴听到有关我的问题的任何线索。
答案 0 :(得分:2)
NHibernate的HQL,与SQL不同,is case sensitive for properties and class names。在您的情况下,该属性称为labelName
,而不是LabelName
,如查询中所述。我建议将属性名称更改为LabelName
(请参阅.net design guidelines)。
此外,如果您使用的是C#3.0+,则可能需要使用auto-implemented properties。
此外,IIRC您需要在查询中使用完全限定的属性,例如select l.LabelName from Label l
最后,如果您要返回字符串列表(LabelName
s),则需要更改方法的签名,并使用SimpleQuery<string>
代替SimpleQuery<Label>
。请参阅SimpleQuery docs以供参考。