Критерии nhibernate - имя таблицы содержит двойные кавычки - PullRequest
0 голосов
/ 20 августа 2010

Я использую 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 голосов
/ 18 марта 2011

Я нашел ответ - у меня были настроены объекты с прописными первыми буквами, но в базе данных у них нет заглавных букв Кавычки в имени таблицы заставляют СУБД просматривать имена таблиц с учетом регистра. Поэтому я изменил свои сущности на строчные, и запрос работает. Спасибо

0 голосов
/ 23 августа 2010

Вам нужно соглашение по именам таблиц. Что-то вроде:

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