.net 使NHibernate完全在DataAccess项目中运行

.net 使NHibernate完全在DataAccess项目中运行,.net,asp.net-mvc,nhibernate,fluent-nhibernate,.net,Asp.net Mvc,Nhibernate,Fluent Nhibernate,我正在尝试第一次配置流利的NHibernate。你得原谅我,因为我是新手 如何使NHibernate及其所有DLL和配置XML都位于类库项目中?我的解决方案是一个经典的三层应用程序,其中web层(MVC3)引用业务层(类库)引用数据访问层(类库)。没有从web层到数据访问层的直接引用 我遇到了各种各样的问题,比如NHibernate试图在root/bin目录中找到hibernate.cfg.xml文件,错误是它无法找到NHibernate.ByteCode.Castle或它的一个依赖项,以及一些

我正在尝试第一次配置流利的NHibernate。你得原谅我,因为我是新手

如何使NHibernate及其所有DLL和配置XML都位于类库项目中?我的解决方案是一个经典的三层应用程序,其中web层(MVC3)引用业务层(类库)引用数据访问层(类库)。没有从web层到数据访问层的直接引用

我遇到了各种各样的问题,比如NHibernate试图在root/bin目录中找到
hibernate.cfg.xml
文件,错误是它无法找到
NHibernate.ByteCode.Castle
或它的一个依赖项,以及一些随机的其他依赖项。当我引用MVC项目中的所有NHibernate DLL以及DataAccess项目,并将
hibernate.cfg.xml
放在MVC项目中时,一切都正常,但这两个对我来说似乎都是个坏主意

必须有一个简单的方法来做到这一点


有人能给我指出一个以这种方式配置NHibernate的示例项目吗?

正如我在评论中指出的,自动化这一过程的“最佳”方法是在数据层项目上的构建之后运行的构建后脚本

我会把

copy $(TargetDir)\NHibernate.ByteCode.Castle.dll $(SolutionDir)\REL_PATH_TO_MVC_PROJECT\bin

您也可以将其作为MVC的预构建。

正如我在评论中所指出的,自动化此操作的“最佳”方法是在DataLayer项目的构建之后运行构建后脚本

我会把

copy $(TargetDir)\NHibernate.ByteCode.Castle.dll $(SolutionDir)\REL_PATH_TO_MVC_PROJECT\bin

您也可以将其作为MVC的预构建。

您还可以尝试使用将所有NHibernate组件合并到您的数据访问程序集中,只提供一个库供您参考。

您还可以尝试使用将所有NHibernate组件合并到您的数据访问程序集中,只给你一个参考库。

所以我找到了我自己问题的答案。
hibernate.cfg.xml
文件必须位于web目录中的原因是因为我是如何引用它的。您必须嵌入资源并以完全限定的方式引用它,而不是按名称引用它:

其次,必要的NHibernate.ByteCode.Castle DLL没有放入根BIN文件夹,因为Visual Studio错误地认为它不需要(因为没有对它的显式代码引用)。所以,我发现这个问题可以通过三种方式解决:

  • 添加一行代码,在Castle命名空间中更新对象(不推荐,但它可以工作…)
  • 添加生成脚本以将必要的DLL复制到BIN中。(DavidAndroidDev的解决方案应该有效)
  • 最后,我所走的路线是,将DLL引用也添加到MVC项目中,到此为止

希望这能帮助其他人。

所以我找到了我自己问题的答案。
hibernate.cfg.xml
文件必须位于web目录中的原因是因为我是如何引用它的。您必须嵌入资源并以完全限定的方式引用它,而不是按名称引用它:

其次,必要的NHibernate.ByteCode.Castle DLL没有放入根BIN文件夹,因为Visual Studio错误地认为它不需要(因为没有对它的显式代码引用)。所以,我发现这个问题可以通过三种方式解决:

  • 添加一行代码,在Castle命名空间中更新对象(不推荐,但它可以工作…)
  • 添加生成脚本以将必要的DLL复制到BIN中。(DavidAndroidDev的解决方案应该有效)
  • 最后,我所走的路线是,将DLL引用也添加到MVC项目中,到此为止

希望这可以帮助其他人。

我刚刚从Visual Studio命令提示符在NHibernate.dll(v.2.1.2)上运行了ILDasm,NHibernate.ByteCode.Castle没有AssemblyRef

所以问题不是Visual Studio本身,问题是Nhibernate DLL不直接引用依赖程序集。我模模糊糊地记得读到这篇文章是因为Castle DLL只在使用延迟加载时才需要,但这给很多人带来了问题,包括我自己

正如DavidDroidev所建议的那样,我最终使用了一个构建后脚本。很难看,但很管用

请注意,NH-v3.2的最新版本有一个内置的字节码提供程序,不再需要Castle DLL


然而,我最近直接从NH 2.1.2/FNH 1.0升级到NH 3.2/FNH 1.3(预发布),并发现两个组件中都有一些突破性的变化。因此,对于一个新的FNH用户,可能最好还是使用旧版本。

我刚刚从Visual Studio命令提示符运行了NHibernate.dll(v.2.1.2)上的ILDasm,而NHibernate.ByteCode.Castle没有AssemblyRef

所以问题不是Visual Studio本身,问题是Nhibernate DLL不直接引用依赖程序集。我模模糊糊地记得读到这篇文章是因为Castle DLL只在使用延迟加载时才需要,但这给很多人带来了问题,包括我自己

正如DavidDroidev所建议的那样,我最终使用了一个构建后脚本。很难看,但很管用

请注意,NH-v3.2的最新版本有一个内置的字节码提供程序,不再需要Castle DLL


然而,我最近直接从NH 2.1.2/FNH 1.0升级到NH 3.2/FNH 1.3(预发布),并发现两个组件中都有一些突破性的变化。因此,对于新的FNH用户,最好使用旧版本。

我的设置与您的设置完全相同。我读过关于NHibernate入门的帖子,上面说只需将NHibernate.dll复制到UI项目的bin文件夹,这样它就可以找到那些引用。是的,我不喜欢它就在那里,但是