我在我的应用程序中使用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的表名是引号。我删除了这些引号,查询运行正常。 有谁知道如何摆脱我的标准中的引号?
感谢您的任何想法
答案 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查看具有区分大小写的表名。所以我将我的实体改为小写,查询有效。感谢