-1

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) を使用すると例外がスローされ、エラー レポートでそれを修正する方法がわかりません。 ここに画像の説明を入力

4

1 に答える 1

1

画像ではなく、実際の例外文字列 (スタック トレース付きの例外全体) を貼り付けた方がよいでしょう。

スタック トレースでわかるように、例外はクラスで発生しcctorます。静的コンストラクターです。明示的に持っていないため、クラスの静的フィールドを初期化するとコードが壊れる可能性があります。SessionFactorycctorSessionFactory

MySQLConnectionString私の最善の策は、構成ファイルに名前が付けられた接続文字列がないことです。その場合:

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

// this will throw NullReferenceException
ConfigurationManager.ConnectionStrings["MySQLConnectionString"].ConnectionString;
于 2012-07-16T23:18:38.183 に答える