我有这个使用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;
}
我的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();
}
}
^ 我尝试在Session属性上设置一个断点,但是没有点击,但是在使用(var session = SessionFactory.Session)时抛出了异常,并且无法真正看到我如何在错误报告中修复它
答案 0 :(得分:1)
如果粘贴实际的异常字符串(堆栈跟踪的整个异常)而不是图像,那会更好。
正如您在堆栈跟踪中看到的那样,异常发生在cctor
类的SessionFactory
中。 cctor
是一个静态构造函数。由于您没有显式的,因此您的代码可能会在初始化SessionFactory
类的静态字段时中断。
我最好的选择是你的配置文件中没有名为MySQLConnectionString
的连接字符串。在那种情况下:
// this is null
ConfigurationManager.ConnectionStrings["MySQLConnectionString"];
// this will throw NullReferenceException
ConfigurationManager.ConnectionStrings["MySQLConnectionString"].ConnectionString;