我想在我正在使用的MVC应用程序中使用NHibernate,而我遇到配置问题。我正在使用我在blog找到的设置。
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var NHibernateConfig = new Configuration();
NHibernateConfig.Configure(HttpContext.Current.Server.MapPath(@"Models\NHibernate\hibernate.cfg.xml"));
NHibernateConfig.AddDirectory(new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath(@"Models\NHibernate\Mapping")));
_sessionFactory = NHibernateConfig.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
我一直在试图让连接正常工作,但现在我在下一行收到错误:
NHibernateConfig.Configure(HttpContext.Current.Server.MapPath(@"Models\NHibernate\hibernate.cfg.xml"));
错误如下。
{"Could not find a part of the path 'C:\\Users\\%username%\\Documents\\Visual Studio 2010\\Projects\\Helpdesk4\\Helpdesk4\\Ticket\\Models\\NHibernate\\hibernate.cfg.xml'."}
我可以清楚地看到问题出在哪里。没有“Ticket”目录。应该...Helpdesk4\\Helpdesk4\\Models\\...
。但我不知道为什么MapPath
认为应该成为路径的一部分。
如果有帮助,请参阅我的_Layout.cshtml
和TicketController
文件中的一些详细信息:
TicketController
public ActionResult TicketLog()
{
IList<Ticket> lstTickets = _repository.getTickets();
return View(lstTickets);
}
布局:
<nav>
<ul id="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
<li>@Html.ActionLink("Ticket Log", "TicketLog", "Ticket")</li>
</ul>
</nav>
答案 0 :(得分:1)
Server.MapPath使用您请求中的相对路径 - 因此,如果您的第一个请求是/Tickets
,那么Server.MapPath(@"Models\NHibernate\hibernate.cfg.xml")
将相对于/Tickets
解析它 - 因此/Tickets/Models/
等...
只需将其更改为Server.MapPath(@"~\Models\NHibernate\hibernate.cfg.xml")
即可找到配置文件 - "~\"
告诉它将其从应用程序的根目录中映射