我尝试使用本教程:Hello NHibernate
这是我的配置NHibernate文件:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="hibernate-configuration" requirePermission="false" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<reflection-optimizer use="false"/>
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=.\SQLEXPRESS; Initial Catalog=dbTest; Trusted_Connection=true;</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="show_sql">true</property>
<mapping resource="TestNHibernate.user.hbm.xml" assembly="TestNHibernate"/>
</session-factory>
</hibernate-configuration></configuration>
这是我的映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="TestNHibernate"
namespace="TestNHibernate">
<class name="user" table="user">
<id name="Id">
<generator class="identity"/>
</id>
<property name="Name" />
</class>
</hibernate-mapping>
班级用户:
class user
{
public virtual int Id { get;set; }
public virtual string Name { get; set; }
}
这是查询代码:
Configuration config = new Configuration();
config.AddAssembly(typeof(user).Assembly);
ISessionFactory sessionFactory = config.BuildSessionFactory();
using (var session = sessionFactory.OpenSession())
{
IQuery query = session.CreateQuery("from user as u");
IList<user> lst = query.List<user>();
foreach (var user in lst)
{
Console.WriteLine(user.Name);
}
}
始终显示错误:
无法执行查询[select user0_.Id为Id0_,user0_.Name为 来自用户user0_的Name0_ [SQL:select user0_.Id为Id0_,user0_.Name为 Name0_来自用户user0 _]
我试图插入,更新,但它也显示无法插入,更新。我的问题在哪里?
是否有我的映射文件? 请给我建议!谢谢!
答案 0 :(得分:1)
如果您使用此代码,NHibernate将生成数据库架构和数据库脚本,以防止区分大小写或其他错误。
var conf = new NHibernate.Cfg.Configuration();
conf.Configure();
var export = new SchemaExport(conf);
export.SetOutputFile(@"DatabaseScript.sql");
export.Drop(true, true);
export.Create(true, true);
我认为“用户”也可以是一个保留字!尝试:
IQuery query = session.CreateQuery("from [user] as u");
答案 1 :(得分:1)
两件事:
(1)在您的映射文件中,您应该将User表括在方括号中,例如[用户]。 User是SQL Server(以及大多数其他SQL系统)中的保留关键字。
<class name="user" table="[user]">
(2)每当你在NHibernate中得到异常时,进入调试模式并查看内部异常。这些通常会提供有关问题的提示。
答案 2 :(得分:0)
确保映射中的表名和列名与数据库模式中定义的名称完全匹配。区分大小写也很重要,具体取决于您的SQL Server配置。