首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >完全在DataAccess项目中使用NHibernate

完全在DataAccess项目中使用NHibernate
EN

Stack Overflow用户
提问于 2012-01-14 04:29:36
回答 4查看 310关注 0票数 1

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

如何让NHibernate、它的所有all和config XML位于一个类库项目中?我的解决方案是一个典型的三层应用程序,其中web层(MVC3)引用了一个业务层(类库),引用了一个数据访问层(类库)。不存在从web层到数据访问层的直接引用。

我遇到了各种各样的问题,比如NHibernate试图在/bin根目录中查找hibernate.cfg.xml文件,出现错误说它无法找到NHibernate.ByteCode.Castle或它的一个依赖项,还有一些随机出现的问题。当我引用MVC项目和DataAccess项目中的所有NHibernate DLL并将hibernate.cfg.xml放入MVC项目中时,一切都很好,但对我来说,这两者似乎都不是一个好主意。

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-16 23:47:02

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

代码语言:javascript
运行
复制
Configuration configuration = new Configuration().Configure(Assembly.GetExecutingAssembly(), "MyDataAccessApp.hibernate.cfg.xml");

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

  • 添加一行代码在城堡命名空间中新建一个对象(不推荐,但它可以工作...)
  • 添加一个构建脚本以将必要的DLL复制到BIN.(DavidAndroidDev的解决方案应该有效) DLL
  • 最后,也就是我使用的方法,是将DLL引用添加到您的MVC项目中,并将其终止。

希望这能帮助到其他人。

票数 3
EN

Stack Overflow用户

发布于 2012-01-14 11:22:17

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

我会把

代码语言:javascript
运行
复制
copy $(TargetDir)\NHibernate.ByteCode.Castle.dll $(SolutionDir)\REL_PATH_TO_MVC_PROJECT\bin

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

票数 2
EN

Stack Overflow用户

发布于 2012-01-16 23:16:44

您还可以尝试使用ILMerge将所有NHibernate组件合并到数据访问程序集中,这样就只有一个库可供引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8856825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档