NHibernate无法编译映射文件

问题描述:

我真的不喜欢发布这样的问题,试图寻找一个错误,可能我错过了一些非常简单的东西,但我刚开始学习NHibernate,我很努力地分析这个现在一天,并找不到问题。NHibernate无法编译映射文件

我的域类:

namespace PanoMeasurer.Core.Domain 
{ 
    public class Panorama : EntityBase 
    { 
     public virtual double HeadingBase 
     { 
      get; 
      set; 
     } 
    } 
} 

namespace PanoMeasurer.Core.Domain 
{ 
    public class EntityBase : IEntity 
    { 
     public virtual Guid OID 
     { 
      get; 
      set; 
     } 
    } 
} 

我Panorama.hbm.xml映射文件:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="PanoMeasurer.Core.Domain" 
        namespace="PanoMeasurer.Core.Domain"> 
    <class name="Panorama"> 
    <id name="OID" generator="guid.comb"/> 
    <property name="HeadingBase"/> 
    </class> 
</hibernate-mapping> 

我打电话在单元测试代码:

 m_config = new Configuration() 
      .SetProperty(Environment.ReleaseConnections, "on_close") 
      .SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName) 
      .SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName) 
      .SetProperty(Environment.ConnectionString, "data source =:memory: ") 
      .AddFile("Mappings/Xml/Panorama.hbm.xml"); 

     m_sessionFactory = m_config.BuildSessionFactory(); 

     Session = m_sessionFactory.OpenSession(); 

     new SchemaExport(m_config).Execute(true, true, false, Session.Connection, Console.Out); 

创建新配置时出现异常:

OneTimeSetUp:NHibernate.MappingException:无法编译映射文档:映射/ XML/Panorama.hbm.xml ----> System.IO.DirectoryNotFoundException:淖FOIpossívellocalizar UMA单方面待办事项caminho“C:\用户\罗德里戈\应用程序数据\本地\ JetBrains公司\安装\ ReSharperPlatformVs14 \映射\ XML \ Panorama.hbm.xml”。 异常不具有堆栈跟踪

它说,它无法编译,因为据我了解,那是因为它找不到某些路径上的XML文件。为什么它在Resharper文件夹中查找所有文件?我的项目输出全部设置为默认bin/debug文件夹。

我的解决办法是组织这样的:

enter image description here

所以你可以看到,PanoMeasurer.Core.Domain组件存在,全景类位于那里。

我的映射文件设置为EmbededResource:

enter image description here

我还要告诉大家,我使用NHibernate的最新的金块版本。

我在这里错过了什么?

+0

什么样的价值属性Panorama.hbm.xml有?构建操作并复制到输出目录?您必须在输出目录 – DanielVorph

+0

上搜索该文件它已设置为Embedded Resource并始终复制 – RBasniak

+0

您是否可以将Build Action属性更改为“content”?当你编译它时,用你的xml配置文件在输出目录中创建一个文件夹 – DanielVorph

我发现这个问题:

1)当ReSharper的运行测试中,它使用),一些所谓的卷影复制组件(Unit testing with Resharper和复制组件到另一个文件夹来运行它们。

2).hbm.xml文件被设置为Embeded Resource并被复制到其项目输出路径,并且Resharper未将该文件复制到程序集中,因此在测试执行期间无法找到它。

解决,而不是

.AddFile("/Mappings/Xml/Panorama.hbm.xml"); 

我用

.AddFile(AssemblyLocation() + "/Mappings/Xml/Panorama.hbm.xml"); 

凡AssemblyLocation正从codebase属性的路径,:

private string AssemblyLocation() 
{ 
    var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase); 

    return Path.GetDirectoryName(codebase.LocalPath); 
} 
+1

我有同样的问题,这样解决了我的问题,谢谢! – Winson