查询时出现NHibernate异常

查询时出现NHibernate异常,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在执行最基本的查询时遇到一个映射异常。 这是我的域类: 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; } } 以及映射类: publi

我在执行最基本的查询时遇到一个映射异常。 这是我的域类:

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");
    }
}

我假设我的查询有问题。

首先确保实际执行了映射类。您可以通过在ProjectMap类中放置断点,然后进行调试以确保执行断点来实现这一点

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

尝试使用DetachedCriteria以确保查询没有拼写错误。。。我通常使用DetachedCriteria进行查询,因为这样我就不需要知道Hql。

首先确保实际执行了映射类。您可以通过在ProjectMap类中放置断点,然后进行调试以确保执行断点来实现这一点

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

尝试使用DetachedCriteria以确保查询没有拼写错误。。。我通常使用DetachedCriteria进行查询,因为这样我就不需要知道Hql。

Yoav问题是需要指定映射文件所在的程序集,而不是实体所在的程序集。把电话改成

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProjectMap>())

Yoav问题是您需要指定映射文件所在的程序集,而不是实体所在的程序集。把电话改成

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProjectMap>())


您的ProjectMap类是否与Project类位于同一程序集中?主题外,但PK和ID之间的区别是什么?否。ProjectMap类位于DatabaseServer程序集中。项目类位于域程序集中。DatabaseServer程序集引用了域程序集。PK是数据库密钥。ID是应用程序密钥。您的ProjectMap类是否与Project类位于同一程序集中?主题外,但PK和ID之间有什么区别?否。ProjectMap类位于DatabaseServer程序集中。项目类位于域程序集中。DatabaseServer程序集引用了域程序集。PK是数据库密钥。ID是应用程序密钥。使用DetachedCriteria和常规条件的原因是什么?您能告诉我DetachedCriteria使用哪个命名空间吗?它来自NHibernate.Criteria。我没有特别的理由使用它,除了它是一个众所周知的API和易于使用。它也可以在没有会话的情况下创建,因此实际上它只是ICriteria接口的包装器。使用DetachedCriteria和常规Criteria的原因是什么?你能告诉我DetachedCriteria使用哪个命名空间吗?它来自NHibernate.Criteria。我没有特别的理由使用它,除了它是一个众所周知的API和易于使用。它也可以在没有会话的情况下创建,所以实际上它只是ICriteria接口的包装器。谢谢,修复了它。我想知道ProjectMap在哪里被引用。顺便说一句-这意味着我必须为每个类映射添加一行,否则一次就足够了,所有类映射都将在同一个集合中?@Yoav,AddFromAssemblyOf方法将通过并一次性为您映射所有类映射。谢谢,这已经解决了问题。我想知道ProjectMap在哪里被引用。顺便说一句-这意味着我必须为每个类映射添加一行,否则一次就足够了,所有类映射都将在同一个集合中?@Yoav,AddFromAssemblyOf方法将通过并一次性映射所有类映射。
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProjectMap>())