2011-03-12 84 views
1

我在C#上使用Castle ActiveRecord作为我的项目,我有一个奇怪的错误。我想通过ActiveRecord方法从一个指定的列中检索数据,这样我就可以将它放到comboBox中。城堡ActiveRecord和HQL-从表中检索数据的问题

我用这个方法用简单的查询:

... 
using Castle.ActiveRecord.Queries; 
... 
public static Lable[] ReturnAllLableNames() 
    { 
     SimpleQuery<Lable> q = new SimpleQuery<Lable>(typeof(Lable), @" 
     Select LableName 
     from Lable 
     "); 
     return q.Execute(); 
    } 

其中拉布勒是一个表,并在我的项目,其中有LableID和LableName列一类。

我第一次建成并试运行我的项目,VS问我指定ActiveRecordBaseQuery.cs文件,当然我没有,所以我按下“取消”和重建我的项目。下一次我有以下错误:

Could not perform ExecuteQuery for Lable 

error details

my class

我没有任何线索,我应该寻找我的错误,因为我用从SimpleQuery例子此代码,我添加了所有必要的参考我的班。

关于第二个想法,是否有任何其他方式使用Castle AR方法检索一个指定列?

我很乐意听到有关我的问题的任何线索。

+0

我现在做了一个临时解决方案。这里是代码:http://pastebin.com/7zdTAQrv(也许有人会觉得它有用) – Chris 2011-03-12 14:44:30

回答

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以供参考。

+0

谢谢!现在我知道我应该从哪里开始寻找我的错误。然而,信函案件的变化并没有解决问题,它可能在HQL的某个地方。 – Chris 2011-03-13 07:45:34