尝试获取ISession时,Fluent nhibernate抛出TypeInitializationException

尝试获取ISession时,Fluent nhibernate抛出TypeInitializationException,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个使用NHibernate的代码 public bool ValidateUser(string username, string password) { bool loginResult; using (var session = SessionFactory.Session) { session.BeginTransaction(); var makeQuery = ses

我有一个使用NHibernate的代码

    public bool ValidateUser(string username, string password)
    {
        bool loginResult;
        using (var session = SessionFactory.Session)
        {
            session.BeginTransaction();

            var makeQuery = session.Query<User>().SingleOrDefault(x => x.Username == username && x.Password == password);

            loginResult = makeQuery != null;
        }

        return loginResult;
    }
public bool ValidateUser(字符串用户名、字符串密码)
{
布尔逻辑结果;
使用(var session=SessionFactory.session)
{
session.BeginTransaction();
var makeQuery=session.Query().SingleOrDefault(x=>x.Username==Username&&x.Password==Password);
loginResult=makeQuery!=null;
}
返回登录结果;
}
我的SessionFactory看起来像这样

using NHibernate;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using WebSite.DatabaseModels;
using System;
namespace GameServer.Repository
{
public class SessionFactory
{
    private static string connString = System.Configuration.ConfigurationManager.ConnectionStrings["MySQLConnectionString"].ConnectionString;

    private static ISessionFactory session;
    private static object syncRoot = new Object();

    private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
            .Database(MySQLConfiguration
            .Standard
            .ConnectionString(connString))
            .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf<UserMap>())
                .ExposeConfiguration(UpdateSchema)
                .BuildSessionFactory();
    }

    private static void UpdateSchema(Configuration cfg)
    {
        new SchemaUpdate(cfg);
    }

    public static ISession Session
    {
        get
        {
            if (session == null)
            {
                lock (syncRoot)
                {
                    if (session == null)
                        session = CreateSessionFactory();
                }
            }
            return session.OpenSession();
        }
    }
使用NHibernate;
使用FluentNHibernate.Cfg;
使用FluentNHibernate.Cfg.Db;
使用NHibernate.Cfg;
使用NHibernate.Tool.hbm2ddl;
使用WebSite.DatabaseModels;
使用制度;
命名空间GameServer.Repository
{
公共类会话工厂
{
私有静态字符串connString=System.Configuration.ConfigurationManager.ConnectionString[“MySQLConnectionString”].ConnectionString;
私有静态会话;
私有静态对象syncRoot=新对象();
私有静态ISessionFactory CreateSessionFactory()
{
流畅地返回。Configure()
.数据库(MySQLConfiguration
标准
.ConnectionString(连接字符串))
.Mappings(m=>m.FluentMappings
.AddFromAssemblyOf())
.ExposeConfiguration(UpdateSchema)
.BuildSessionFactory();
}
私有静态void UpdateSchema(配置cfg)
{
新方案更新(cfg);
}
公众休会期
{
得到
{
if(会话==null)
{
锁定(同步根)
{
if(会话==null)
会话=CreateSessionFactory();
}
}
return session.OpenSession();
}
}
^ 我尝试在Session属性中设置一个断点,但没有成功,但是在使用(var Session=SessionFactory.Session)时引发了异常,因此无法在错误报告中修复它

如果粘贴实际的异常字符串(带有堆栈跟踪的整个异常)而不是图像,效果会更好

正如您在堆栈跟踪中所看到的,异常发生在
SessionFactory
类的
cctor
中。
cctor
是一个静态构造函数。由于您没有明确的构造函数,您的代码在初始化
SessionFactory
类的静态字段时可能会中断

我的最佳选择是,您的配置文件中没有名为
MySQLConnectionString
的连接字符串。在这种情况下:

// this is null
ConfigurationManager.ConnectionStrings["MySQLConnectionString"];

// this will throw NullReferenceException
ConfigurationManager.ConnectionStrings["MySQLConnectionString"].ConnectionString;

如何复制整个异常?我总是会得到一个异常类型的字符串和一个指向执行此操作时失败的文件的url?您可以将代码包装在
try…catch
中,然后调用
exception.ToString()
来获取整个异常。是否检查了配置中的连接字符串?