nFluent NHibernate .net Core управление сессиями - PullRequest
0 голосов
/ 25 февраля 2019

Я - Java-разработчик, плохо знакомый с Dotnet, и пытаюсь создать приложение, используя .net core 2.2 и nHibernate 5.2.Но не уверен, как правильно управлять сессиями.

В Java Spring мы используем аннотацию @Transactional, и все уже позаботилось, но не можем увидеть подобные вещи здесь или, может быть, я неправильно выполняю настройку

Я использовал справку, указанную ниже url NHibernate SessionFactory, обработанную .NET Core DI , но не предоставил подробностей.это дает мне ошибку, я не могу использовать область видимости внутри синглтона, что правильно.

Это структура слоя, у меня есть Controller -> Service вызывает (Repository 1, Repository 2)

Так что моя транзакция должна начатьсяиз уровня обслуживания и все подчеркнутые вызовы репозитория должны быть частью одной транзакции.мой Startup.cs выглядит следующим образом

public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IConfiguration>(Configuration);
        services.AddSingleton<GenericService>();
        services.AddSingleton<IGenericRepository, GenericRepositoryImpl>();


        services.AddSingleton<INHibernateHelper, NHibernateHelper>();


        services.AddMvc();
        services.AddSession();
    }

И NHibernateHelper выглядит следующим образом

public class NHibernateHelper : INHibernateHelper
            {
                private readonly string _connectionString;
                private readonly object _lockObject = new object();
                private ISessionFactory _sessionFactory;

                public NHibernateHelper(IConfiguration configuration)
                {
                    _connectionString = configuration["ConnectionStrings:DefaultConnection"];
                }

                private ISessionFactory SessionFactory
                {
                    get
                    {
                        if (_sessionFactory == null)
                        {
                            CreateSessionFactory();
                        }

                        return _sessionFactory;
                    }
                }

                public ISession OpenSession()
                {
                    return SessionFactory.OpenSession();
                }

                private void CreateSessionFactory()
                {

                        var fluentConfiguration = Fluently.Configure()
                            .Database(
                                MsSqlConfiguration.MsSql2012.ConnectionString(_connectionString).ShowSql()
                            )
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<GenricEntityMapping>()
                            );

                        _sessionFactory = fluentConfiguration.BuildSessionFactory();

                }
            }

Я внедряю помощник Hibernate на RepositoryLevel, чтобы я мог получить доступ к ISession на уровне репозитория, но каждый разЯ должен использовать

using (var session = OpenSession())
{
}

Как использовать этот сеанс, начиная с уровня обслуживания, и тот же сеанс должен распространяться на уровень хранилища.Если кто-то может поделиться (.net и nHibernate) образцом рабочего кода с сервисом и кодом репозитория с транзакцией на сервисном уровне, мы будем очень признательны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...