【发布时间】:2011-08-27 09:40:51
【问题描述】:
作为著名的 ORM,我们决定将 nHIbernate 与 asp.net mvc3 一起使用。我们通过以下方式设置我们的项目:
- NHibernate 存储库 [包含 nhibernate 的映射、服务和存储库]
- MVC3 [这是一个 UI]
- 测试 MVC NHibernate [这是一个带有 NUnit 的测试项目]
在上面,[] 文本被写入以明确层。
一切正常,意味着所有单元测试都通过了映射、插入、更新、删除操作。 不幸的是,当我们从我们的 mvc3 应用程序中执行相同的操作时,它会抛出以下错误:
“配置持久层时发生异常。”完整的堆栈跟踪如下:
在 NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader, Boolean fromAppSetting) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\ConfigurationSchema\HibernateConfiguration.cs:line 55 在 NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\ConfigurationSchema\HibernateConfiguration.cs:line 36 在 NHibernate.Cfg.Configuration.Configure(XmlReader textReader) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1511 在 NHibernate.Cfg.Configuration.Configure(String fileName, Boolean ignoreSessionFactoryConfig) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1433 在 NHibernate.Cfg.Configuration.Configure(String fileName) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1418 在 NHibernate.Cfg.Configuration.Configure() 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1404 在 D:\example\examplemvcapp-NHExample\examplemvcapp\NHibernateRepository.cs:line 33 中的 examplemvcapp.NHibernateRepository..ctor() 在 D:\example\examplemvcapp-NHExample\examplemvcapp-NHExample.UI\Models\Department.cs:line 70 中的 examplemvcapp_NHExample.UI.Models.CreateAppraisalModel..ctor()请注意 NHIbernate 的所有配置设置在 MVC3 应用程序中与在测试项目中相同。
以下是我们遇到异常的人:
using (var nhr = new NHibernateRepository())
{
this.Departments = nhr.GetAll<Departments>().Select(x => new SelectListItem
{
Text = x.Departmentdescription, Value = x.Id.ToString()
});
}
上面会出现以下情况并抛出异常:
public NHibernateRepository()
{
if (sessionFactory == null)
{
config = new Configuration();
config.Configure();
config.AddAssembly(typeof(NHibernateRepository).Assembly);
sessionFactory = config.BuildSessionFactory();
}
Session = sessionFactory.OpenSession();
transaction = Session.BeginTransaction();
Rollback = false;
}
以上在测试项目中运行良好:
using (var nhr = new NHibernateRepository())
{
var DeptList = nhr.GetAll<Departments>();
}
以下是放置在NHibernateRepository项目中的hibernate.cfg.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=(local);Initial Catalog=myDatabaseName;Integrated Security=True</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="cache.use_query_cache">false</property>
<property name="adonet.batch_size">100</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
</session-factory>
</hibernate-configuration>
除上述之外,该项目还拥有 NHibernate 所需的所有 dll。
在测试项目中没有特殊的配置设置,只是我们添加了存储库项目的引用和其他所需的程序集,并且工作正常。
在 MVC3 应用程序项目中保持相同。
在这方面的任何帮助都是非常可观的。
问候
【问题讨论】:
-
@Bertrand - 非常感谢格式化。我真的很想这样做,但没能做到。
-
nunit 和 Web 应用程序倾向于以不同的方式读取配置文件。请提供有关如何设置 NHibernate 配置的更多信息(它在哪个文件中,存在哪些值等)。
-
@Michael - 用更多细节更新了原始问题。
-
谢谢大家!我解决了这个问题。我最后犯了一个愚蠢的错误:(将hbm文件制作为嵌入并且一切正常:)
-
如上所述,我找到并通知了解决方案,我将此问题标记为已关闭。啊!我试图将其标记为已关闭,但我没有找到从关闭窗口询问的任何有效选项。我请求版主请关闭此问题
标签: nhibernate asp.net-mvc-3 razor nunit