В моем проекте Nhibernate Test нет ошибки установки текущего контекста - PullRequest
3 голосов
/ 24 сентября 2011

Я получаю сообщение об ошибке:

No CurrentSessionContext configured (set the property current_session_context_class).

Я не уверен, что туда поместить, у меня есть это:

public class NhDbHelper
    {

        public NhDbHelper()
        {
            CreateSessionFactory();
        }

        private ISessionFactory _sessionFactory;

        public ISessionFactory SessionFactory
        {
            get { return _sessionFactory; }
        }


        private void CreateSessionFactory()
        {
            _sessionFactory = Fluently
                    .Configure()
                    .Database((MsSqlConfiguration.MsSql2008 // 
                            .ConnectionString(@"Server=.\SQLExpress;Database=abc;Uid=sa;Pwd=123;")
                            .ShowSql()))
                    .Mappings(m => m.FluentMappings
                    .AddFromAssemblyOf<UserMap>())
                    .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                    .BuildSessionFactory();
        }
    }

Тогда в моем хранилище я просто используюСвойство SessionFactory в помощнике.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2013

в вашем «Свободно» перед оператором «.Mappings (----) необходимо указать CurrentSessionContext. Для этого, предполагая, что вы используете его в веб-контексте, вы должны вставить над». Mappings ", как показано ниже. (Я также изменил получение значения строки подключения, благодаря Fluent:

private void CreateSessionFactory()
    {
        _sessionFactory = Fluently
                .Configure()
                .Database((MsSqlConfiguration.MsSql2008 // 
                        .ConnectionString(c=>c.FromConnectionStringWithKey("abc"))
                        .ShowSql()))
                .CurrentSessionContext("web")
                .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf<UserMap>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                .BuildSessionFactory();
    }
1 голос
/ 24 сентября 2011

Я предполагаю, что вы получаете эту собственность, когда пытаетесь использовать sessionFactory.GetCurrentSesssion()

_config.ExposeConfiguration(cfg => cfg.Properties.Add("current_session_context_class", "thread"));

Также я бы предложил вам использовать sessionFactory.OpenSession()

0 голосов
/ 24 октября 2016

Для людей, использующих контекст веб-сеанса: .CurrentSessionContext("web"), сеанс сохраняется в HttpContext.Items, который не будет существовать для ваших модульных тестов.

.CurrentSessionContext("thread_static") может использоваться вместо этого в модульных тестах.*

...