今天下载了NHibernate-2.1.2.GA-bin.zip版本,做了一个简单的例子,发现了2个怪问题,一直找不到原因,请大家帮忙看看:
例子代码如下:
Configuration cfg = new Configuration();
IDictionary<string, string> props = new Dictionary<string, string>();
props.Add("hibernate.connection.provider", "NHibernate.Connection.DriverConnectionProvider");
props.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");
props.Add("hibernate.connection.connection_string", @"Server=.\SQLExpress;Initial Catalog=Test;Integrated Security=SSPI");
props.Add("show_sql", "true");
props.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2005Dialect");
cfg.Properties = props;
cfg.Configure();
ISessionFactory factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
Console.WriteLine(session);
说明:本文最下面的截图里第一个是运行有错误的hibernate.cfg.xml,第二个是运行正常的没有空格的hibernate.cfg.xml
详细异常信息如下:
NHibernate.Cfg.HibernateConfigException : An exception occurred parsing configuration :元素 命名空间“urn:nhibernate-configuration-2.2”中的“hibernate-configuration”。 不能包含文本。应为可能元素的列表: 命名空间“urn:nhibernate-configuration-2.2”中的“bytecode-provider, reflection-optimizer, session-factory”。。
----> System.Xml.Schema.XmlSchemaValidationException : 元素 命名空间“urn:nhibernate-configuration-2.2”中的“hibernate-configuration”。 不能包含文本。应为可能元素的列表: 命名空间“urn:nhibernate-configuration-2.2”中的“bytecode-provider, reflection-optimizer, session-factory”。
运行有错误的hibernate.cfg.xml:
运行正常的没有空格的hibernate.cfg.xml:
至于你上面的原因,我猜想是NHibernate硬编码之后不能正常解析hibernate.cfg.xml文件。
cfg.Configure();默认就是找hibernate.cfg.xml文件解析。
既然你写了硬编码,就不要用hibernate.cfg.xml文件了,就是不用调用cfg.Configure();
当然最好使用hibernate.cfg.xml文件,注意把hibernate.cfg.xml文件属性设置为“始终复制”。
Configuration cfg = new Configuration();
cfg.Configure();
ISessionFactory factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
就可以了。
我也遇到这么问题 ? 是怎么解决的呀 ?