NHibernate исключение по запросу - PullRequest
1 голос
/ 31 декабря 2010

Я получаю исключение сопоставления, выполняя самый простой запрос. Это мой класс домена:

public class Project
{
    public virtual string PK { get; set; }
    public virtual string Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
}

И класс отображения:

public class ProjectMap :ClassMap<Project>
{
    public ProjectMap()
    {
        Table("PROJECTS");
        Id(x => x.PK, "PK");
        Map(x => x.Id, "ID");
        Map(x => x.Name, "NAME");
        Map(x => x.Description, "DESCRIPTION");
    }
}

Конфигурация:

public ISessionFactory SessionFactory
{
    return Fluently.Configure()
        .Database(MsSqlCeConfiguration.Standard.ShowSql().ConnectionString(c => c.Is("data source=" + path)))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Project>())
        .BuildSessionFactory();

}

И запрос: Проект IList;

using (ISession session = SessionFactory.OpenSession())
{
    IQuery query = session.CreateQuery("from Project");
    project = query.List<Project>();
}

Я получаю исключение в строке запроса:

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: Project is not mapped [from Project]
   at NHibernate.Hql.Ast.ANTLR.SessionFactoryHelperExtensions.RequireClassPersister(String name)
   at NHibernate.Hql.Ast.ANTLR.Tree.FromElementFactory.AddFromElement()
   at NHibernate.Hql.Ast.ANTLR.Tree.FromClause.AddFromElement(String path, IASTNode alias)
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement()
   at NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate()
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(HqlParseEngine parser, String collectionRole)
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole)
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 replacements, Boolean shallow)
   at NHibernate.Engine.Query.HQLQueryPlan..ctor(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String queryString, Boolean shallow, IDictionary`2 enabledFilters)
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String query, Boolean shallow)
   at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String queryString)

Я предполагаю, что с моим запросом что-то не так.

Ответы [ 2 ]

5 голосов
/ 31 декабря 2010

Проблема в том, что вам нужно указать сборку, в которой находятся ваши файлы сопоставления, а не там, где находятся ваши сущности.Измените вызов на

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProjectMap>())
0 голосов
/ 31 декабря 2010

Сначала убедитесь, что ваш класс отображения действительно выполнен. Это можно сделать, поместив точки останова в класс ProjectMap, а затем отладив, чтобы убедиться, что он выполняется.

using (ISession Session = SessionFactory.OpenSession())
{
    DetachedCriteria Filter = DetachedCriteria.For<Project>();
    var Projects = Filter.GetExecutableCriteria(Session).List<Project>();
}

Попробуйте использовать DetachedCriteria, чтобы убедиться, что ваш запрос не пропущен ... Я обычно использую DetachedCriteria для запросов, потому что тогда мне не нужно знать Hql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...