C# NHibernate映射异常
我对学习NHibernate很感兴趣,所以我搜索了一门课程,我在Pluralsight中找到了一门,但当我继续学习这些示例时,我发现了这个异常,我不知道为什么会出现这个异常。。。这有点烦人,因为在我搜索的地方,我找不到关于异常的更多信息,也找不到NHibernate的最新指南。所以我的问题是:C# NHibernate映射异常,c#,nhibernate,C#,Nhibernate,我对学习NHibernate很感兴趣,所以我搜索了一门课程,我在Pluralsight中找到了一门,但当我继续学习这些示例时,我发现了这个异常,我不知道为什么会出现这个异常。。。这有点烦人,因为在我搜索的地方,我找不到关于异常的更多信息,也找不到NHibernate的最新指南。所以我的问题是: a) 对于异常本身,它发生的原因 b) 如果你能向我推荐一个学习NHibernate的网站、课程或任何最新的东西。 提前谢谢 我把代码留在这里: Customer.cs: namespace NHiber
a) 对于异常本身,它发生的原因
b) 如果你能向我推荐一个学习NHibernate的网站、课程或任何最新的东西。
提前谢谢 我把代码留在这里: Customer.cs:
namespace NHibernateDemo
{
public class Customer
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
}
Customer.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:hibernate-mapping-2.2"
assembly="NHibernateDemo"
namespace="NHibernateDemo">
<class name="Customer">
<id name="Id">
<generator class="native"/>
</id>
<property name="FirstName"/>
<property name="LastName"/>
</class>
</hibernate-mapping>
堆栈跟踪:
NHibernate.MappingException: Could not compile the mapping document: NHibernateDemo.Customer.hbm.xml ---> System.InvalidOperationException: Error en el documento XML (1, 2). ---> System.InvalidOperationException: No se esperaba <hibernate-mapping xmlns='urn:hibernate-mapping-2.2'>.
en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHbmMapping.Read109_hibernatemapping()
--- Fin del seguimiento de la pila de la excepción interna ---
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
en System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
en NHibernate.Cfg.NamedXmlDocument..ctor(String name, XmlDocument document, XmlSerializer serializer)
en NHibernate.Cfg.NamedXmlDocument..ctor(String name, XmlDocument document)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader, String name)
--- Fin del seguimiento de la pila de la excepción interna ---
en NHibernate.Cfg.Configuration.LogAndThrow(Exception exception)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader, String name)
en NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name)
en NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly)
en NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly)
en NHibernateDemo.Program.Main(String[] args) en d:\Sistema\Documents\Visual Studio 2015\Projects\NHibernateDemo\NHibernateDemo\Program.cs:línea 28
NHibernate.MappingException:无法编译映射文档:NHibernateDemo.Customer.hbm.xml-->System.invalidoOperationexception:错误en el documento xml(1,2)。-->System.InvalidOperationException:无se可操作性。
en Microsoft.Xml.Serialization.GeneratedAssembly.XMLSerializationReaderHBMapping.Read109_hibernatemapping()
---国际社会的例外情况---
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader XmlReader,字符串编码样式,XmlDeserializationEvents)
en System.Xml.Serialization.XmlSerializer.Deserialize(TextReader)
en NHibernate.Cfg.NamedXmlDocument..ctor(字符串名称、XmlDocument文档、XmlSerializer序列化程序)
en NHibernate.Cfg.NamedXmlDocument..ctor(字符串名称,XmlDocument文档)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader,字符串名称)
---国际社会的例外情况---
en NHibernate.Cfg.Configuration.loganthrow(异常)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader,字符串名称)
en NHibernate.Cfg.Configuration.AddInputStream(流xmlInputStream,字符串名称)
en NHibernate.Cfg.Configuration.AddResource(字符串路径,程序集)
en NHibernate.Cfg.Configuration.AddAssembly(程序集)
en NHibernateDemo.Program.Main(字符串[]args)en d:\Sistema\Documents\Visual Studio 2015\Projects\NHibernateDemo\NHibernateDemo\Program.cs:línea 28
问题是它找不到要编译的文件,所以:private string AssemblyLocation()
{
var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);
return Path.GetDirectoryName(codebase.LocalPath);
}
尝试手动将文件复制到bin
目录(Debug
或Release
或..)确保您的
NHibernateDemo.Customer.hbm.xml
属性是Build Action:Embedded resource
和Copy to Output Directory:Copy Always
如果仍然存在问题,请尝试添加:
cfg.AddFile(“NHibernateDemo.Customer.hbm.xml”)
(或指向hbm.xml
文件的路径)如果仍然存在问题,请尝试:
cfg.addFile(AssemblyLocation()+“NHibernateDemo.Customer.hbm.xml”)
(或指向hbm.xml
文件的路径,其中AssemblyLocation()
是:private string AssemblyLocation()
{
var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);
return Path.GetDirectoryName(codebase.LocalPath);
}
<>代码> CFG。AddioDebug <代码>不是必需的,所以如果上面的工作没有一个,你可以考虑删除它:P
我发现(感谢Fr.EdEric)该问题是hbm.xml文件中的一行。这一行是导致该问题发生的原因:
您可以发布异常消息吗?请阅读/发布完整的异常消息。该异常通常附带一个内部异常,提供更多详细信息,该异常可能有自己的内部异常等等。通常获取完整异常消息的更快更简单的方法是调用异常上的.ToString()
,或者如果您正在Visual Studio下的调试会话中,请单击“将异常详细信息复制到剪贴板”。谢谢,我不知道“ToString”诀窍…我现在要更新错误日志…我猜是第二个hibernate
出错了,xmlns
属性值中的那个,而不是标记名。所以正确的版本是是的,你是对的@Frédéric,是第二个“hibernate”在xmlns属性值中。我在完整的错误消息中看到了该错误。再次感谢您的建议
private string AssemblyLocation()
{
var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);
return Path.GetDirectoryName(codebase.LocalPath);
}