【问题标题】:Castle ActiveRecord and HQL - problem with retrieveing data from tableCastle ActiveRecord 和 HQL - 从表中检索数据的问题
【发布时间】:2011-03-12 07:41:52
【问题描述】:

我在 C# 上的项目中使用 Castle ActiveRecord,但出现了一个奇怪的错误。我想通过 ActiveRecord 方法从一个指定的列中检索数据,以便我可以将其放入组合框。

我用这个方法简单查询:

...
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

error details

my class

我不知道应该在哪里搜索我的错误,因为我使用了 SimpleQuery 示例中的这段代码,并为我的类添加了所有必要的引用。

再想一想,有没有其他方法可以使用 Castle AR 方法检索一个指定的列?

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

【问题讨论】:

  • 我现在做了一个临时解决方案。这是代码:pastebin.com/7zdTAQrv(也许有人会觉得它有用)

标签: c# nhibernate hql castle-activerecord


【解决方案1】:

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

最后,如果你的意思是返回一个字符串列表(LabelNames),你需要改变方法的签名并且使用SimpleQuery&lt;string&gt;而不是SimpleQuery&lt;Label&gt;。参考SimpleQuery docs

【讨论】:

  • 谢谢!现在我知道我应该从哪里开始寻找我的错误。但是字母大小写的改变并没有解决问题,它可能在HQL的某个地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2011-12-21
  • 2013-07-26
相关资源
最近更新 更多