Asp.net NHibernate映射问题-无效的对象名称';员工';
我试图在控制台应用程序上配置NHibernate,在该应用程序中,我试图将Employee类映射到表Employee 我得到以下例外情况,我不知道: 类别:Asp.net NHibernate映射问题-无效的对象名称';员工';,asp.net,nhibernate,Asp.net,Nhibernate,我试图在控制台应用程序上配置NHibernate,在该应用程序中,我试图将Employee类映射到表Employee 我得到以下例外情况,我不知道: 类别: class Employee { public int id; public string name; public Employee manager; public string SayHello() { return str
class Employee
{
public int id;
public string name;
public Employee manager;
public string SayHello()
{
return string.Format(
"'Hello World!', said {0}.", name);
}
}
表:
CREATE TABLE Employee (
id int identity primary key,
name varchar(50),
manager int )
GO
映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
auto-import="true">
<class name="ConsoleApplication.Employee, ConsoleApplication1" lazy="false">
<id name="id" access="field">
<generator class="native" />
</id>
<property name="name" access="field" column="name"/>
<many-to-one access="field" name="manager" column="manager"
cascade="all"/>
</class>
</hibernate-mapping>
我的数据库中有员工,当我运行消息属性中给定的查询时,该查询将成功执行
对此有何想法
谢谢,
Mahesh我怀疑问题可能出在对经理的引用上,而不是对顶级员工的引用上。您的映射是否将管理器作为类而不是值引用?从生成的SQL中可以看出,您不知道问题出在manager字段的多对一映射中。您已指定:
access="field"
这告诉NHibernate使用反射来确定数据库中字段的名称。您有两个选项,但在您的情况下,我认为删除access属性是安全的,这意味着NHibernate将使用其默认访问(属性),然后使用manager,因为您已将其指定为属性的名称。如果这不符合您的要求,请阅读field属性以查看其他选项。我知道NHibernate无法映射到内部类
将
public
范围声明添加到Employee类。100%确定您指向了正确的数据库?是。配置也指向的AAM..将单词public添加到Employee类声明中是否有帮助?
Message: could not execute query
[ select employee0_.id as id0_, employee0_.name as name0_, employee0_.manager as manager0_ from Employee employee0_ ]
[SQL: select employee0_.id as id0_, employee0_.name as name0_, employee0_.manager as manager0_ from Employee employee0_]
StackTrace: at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
at NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results)
at NHibernate.Impl.SessionImpl.List[T](String query, QueryParameters parameters)
at NHibernate.Impl.QueryImpl.List[T]()
at ConsoleApplication.Program.LoadEmployeesFromDatabase() in C:\Mahesh\Code\HelloNHibernate\ConsoleApplication1\Program.cs:line 50
at ConsoleApplication.Program.Main(String[] args) in C:\Mahesh\Code\HelloNHibernate\ConsoleApplication1\Program.cs:line 18
Inner Exception: Invalid object name 'Employee'
access="field"