nhibernate标准 - 表名有双引号

时间:2010-08-20 18:40:33

标签: nhibernate fluent-nhibernate criteria

我在我的应用程序中使用Fluent NHibernate。 我有一个看起来像这样的标准查询 -

var query = DetachedCriteria
                .For<table2>()
                .SetProjection(Projections.Distinct(Projections.Property("id")))
                //.Add(Restrictions.Between("date_field", startDate, endDate))
                .Add(Restrictions.Eq("id", 204010));

            Add(Subqueries.In("id", query));

错误输出错误 -

NHibernate.ADOException was unhandled
Message=could not execute query

我查看了查询并尝试运行它,但它也出错了。然后我注意到在子查询中,table2的表名是引号。我删除了这些引号,查询运行正常。 有谁知道如何摆脱我的标准中的引号?

感谢您的任何想法

2 个答案:

答案 0 :(得分:0)

您需要一个表名约定。类似的东西:

public class TableNameConvention : IClassConvention, IClassConventionAcceptance
{
    public void Apply(IClassInstance instance)
    {
        instance.Table("`" + Inflector.Underscore(instance.EntityType.Name) + "´");
    }

    public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
    {
        criteria.Expect(x => x.TableName, Is.Not.Set);
    }
}

或使用旧学校xml:

 <class xmlns="urn:nhibernate-mapping-2.2" name="Address" table="`address´">
      <id name="Id">
      <column name="address_id" />
      <generator class="identity" />
    </id>
 </class>

答案 1 :(得分:0)

我找到了答案 - 我的实体设置为首字母,但在数据库中它们没有上限。表名中的引号使RDBMS查看具有区分大小写的表名。所以我将我的实体改为小写,查询有效。感谢