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文件夹。
我的解决办法是组织这样的:
所以你可以看到,PanoMeasurer.Core.Domain组件存在,全景类位于那里。
我的映射文件设置为EmbededResource:
我还要告诉大家,我使用NHibernate的最新的金块版本。
我在这里错过了什么?
我发现这个问题:
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);
}
我有同样的问题,这样解决了我的问题,谢谢! – Winson
什么样的价值属性Panorama.hbm.xml有?构建操作并复制到输出目录?您必须在输出目录 – DanielVorph
上搜索该文件它已设置为Embedded Resource并始终复制 – RBasniak
您是否可以将Build Action属性更改为“content”?当你编译它时,用你的xml配置文件在输出目录中创建一个文件夹 – DanielVorph