NHibernate映射异常:部分文件路径不正确

时间:2013-09-13 15:52:44

标签: asp.net-mvc nhibernate razor nhibernate-mapping

我想在我正在使用的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.cshtmlTicketController文件中的一些详细信息:

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>

1 个答案:

答案 0 :(得分:1)

Server.MapPath使用您请求中的相对路径 - 因此,如果您的第一个请求是/Tickets,那么Server.MapPath(@"Models\NHibernate\hibernate.cfg.xml")将相对于/Tickets解析它 - 因此/Tickets/Models/等...

只需将其更改为Server.MapPath(@"~\Models\NHibernate\hibernate.cfg.xml")即可找到配置文件 - "~\"告诉它将其从应用程序的根目录中映射