.netcoreのfluentnhibernateを使用して複数のデータベースにアクセスする

マイケル・エドワーズ

私はnHibernateを初めて使用し、複数のSQLServerデータベースの.NetCoreで使用しようとしています。ドキュメントを確認してIsessionfactotyを作成し、起動時に構成しましたが、リポジトリメソッドでセッションオブジェクトにアクセスしようとすると、1つのデータベース、つまりDbConnectionStringのみを検索しているため、エラーが発生します。

私のstartup.csは次のようになります

var sessionFactory = Fluently
                            .Configure()
                            .Database(() =>
                            {
                                return FluentNHibernate.Cfg.Db.MsSqlConfiguration
                                        .MsSql2008
                                        .ShowSql()
                                        .ConnectionString(Configuration.GetConnectionString("DbConnectionString"));
                            })
                            .Database(() =>
                            {
                                return FluentNHibernate.Cfg.Db.MsSqlConfiguration
                                        .MsSql2008
                                        .ShowSql()
                                        .ConnectionString(Configuration.GetConnectionString("AdminDbConnectionString"));
                            })
                            .BuildSessionFactory();

            services.AddSingleton<NHibernate.ISession>(factory => nHIbernateSession.OpenSession());

これは、コントローラーから呼び出しているリポジトリクラスです。

public class BusinessRepo
    {
        ISession _session;

        public BusinessRepo(ISession session)
        {
            _session = session;
        }

        //This method needs to use DbConnectionString
        public PersonGeo GetPersonById(string personId)
        {
            var value = _session.CreateCriteria<PersonGeo>()
                .Add(Restrictions.Eq("Person_ID", personId))
                .SetCacheable(true)
                .SetCacheMode(CacheMode.Normal)
                .List<PersonGeo>();
            return value.FirstOrDefault();
        }


        //This method needs to used AdminDbConnectionString
        public List<User> GetAllUsers()
        {
            //If I debug the _session and look for connection string it is taking "DbConnectionstring (which is configured first in startup)"
            var result = _session.CreateSQLQuery("SELECT UserID,UserName,Email,IsActive FROM Users").List<User>();
            return result();
        }
    }

これは、コントローラーから呼び出しているリポジトリクラスです。

  var person = _repo.GetPersonById(personId);
  var allUser = _repo.GetAllUsers();

また、_sessionオブジェクトが他のデータベースを参照しているため、オブジェクト名が「tableName」で見つかりません。誰かがそれを実装する方法についてアイデアを持っていますか?

ThejaSingireddy

スタートアップをに変更します

    var dbSessionFatory = Fluently
                        .Configure()
                        .Database(() =>
                        {
                            return FluentNHibernate.Cfg.Db.MsSqlConfiguration
                                    .MsSql2008
                                    .ShowSql()
                                    .ConnectionString(Configuration.GetConnectionString("DbConnectionString"));
                        })
                        .BuildSessionFactory();
    var adminDbSessionFactory= Fluently
                        .Configure()
                        .Database(() =>
                        {
                            return FluentNHibernate.Cfg.Db.MsSqlConfiguration
                                    .MsSql2008
                                    .ShowSql()
                                    .ConnectionString(Configuration.GetConnectionString("AdminDbConnectionString"));
                        })
                        .BuildSessionFactory();
       services.AddSingleton<NHibernate.ISession>(factory => dbSessionFatory.OpenSession());
       services.AddSingleton<NHibernate.ISession>(factory => adminDbSessionFactory.OpenSession());

次に、SessionfactoryのIEnumerableをrepositoyメソッドに挿入し、必要なデータベースに特定のsessionfactoryを使用します。

public class BusinessRepo
    {
        private IEnumerable<ISession> _sessions;

        public BusinessRepo(IEnumerable<ISession> sessions)
        {
            _sessions = sessions;
        }

        //This method needs to use DbConnectionString
        public PersonGeo GetPersonById(string personId)
        {

            var _session = _sessions.Where(a => a.Connection.Database == "DbName").FirstOrDefault();
            var value = _session.CreateCriteria<PersonGeo>()
                .Add(Restrictions.Eq("Person_ID", personId))
                .SetCacheable(true)
                .SetCacheMode(CacheMode.Normal)
                .List<PersonGeo>();
            return value.FirstOrDefault();
        }


        //This method needs to used AdminDbConnectionString
        public List<User> GetAllUsers()
        {

            var _session = _sessions.Where(a => a.Connection.Database == "DbName").FirstOrDefault();
            //If I debug the _session and look for connection string it is taking "DbConnectionstring (which is configured first in startup)"
            var result = _session.CreateSQLQuery("SELECT UserID,UserName,Email,IsActive FROM Users").List<User>();
            return result();
        }
    }

すべてのメソッドで実行する代わりに、データベース名をパラメーターとして受け取り、ISessionオブジェクトを返す別のメソッドを作成することで、リファクタリングすることができます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Entityfrmeworkを使用してAsp.netcoreからデータベースにアクセスする方法

分類Dev

KubernetesクラスターのpgAdminを使用してデータベースにアクセスする

分類Dev

複数の配列オブジェクトを使用してJSONデータにアクセスする方法:android

分類Dev

Django-複数のデータベースの値にアクセスする

分類Dev

MySQLWorkbenchを使用してLightsailインスタンスのデータベースにアクセスする

分類Dev

同じデータベースにアクセスする複数の外部データベースのIstioServiceEntry

分類Dev

VSデータセットを使用してMSSQLデータベースへの複数のアクティブな接続を許可する

分類Dev

UICollectionのセクションを使用してデータベースにアクセスする

分類Dev

ipythonを使用してmpiクラスター内の複数のノードにアクセスする

分類Dev

WordPressのwpdbクラスを使用して外部データベースにアクセスする

分類Dev

PHPを使用してクライアントのSQLデータベースにアクセスする

分類Dev

Linuxターミナルを使用してWindows上のSQLデータベースにアクセスする

分類Dev

Access を使用してサード パーティのデータベースにアクセスする方法

分類Dev

codeigniterを使用してデータベースに複数のカートアイテムを追加する方法

分類Dev

laravel5.7を使用して複数の画像をデータベースにアップロードする

分類Dev

コルーチンを使用してUnityのSQLiteデータベースにアクセスする

分類Dev

複数のクラスを介してreactjsデータにアクセスする

分類Dev

異なるサーバーとの複数のデータベース接続を使用して、多対多の関係のリレーショナルデータにアクセスします

分類Dev

kubectlを使用して複数のkubernetesクラスターに適切にアクセスする方法

分類Dev

phpmyadminを使用してMySQL以外のデータベースにアクセスすることは可能ですか?

分類Dev

phpを使用してmysqlデータベースから特定の値にアクセスする方法は?

分類Dev

データベース文字列を使用してファイルにアクセスする際の問題

分類Dev

テキストボックスからデータを挿入して、c#のwhereを使用してデータベースにアクセスする方法

分類Dev

文字列のリストを使用してRのデータフレーム変数にアクセスする

分類Dev

Laravelの画像を使用して複数のデータをデータベースに挿入する

分類Dev

VBAアプリケーションにアクセスします。複数のデータベースを閉じるのをやめます

分類Dev

zeepを使用してデータベースにアクセスする

分類Dev

javascriptを使用してJSONデータベースにアクセスする方法

分類Dev

Clojureを使用してデータベースにアクセスする

Related 関連記事

  1. 1

    Entityfrmeworkを使用してAsp.netcoreからデータベースにアクセスする方法

  2. 2

    KubernetesクラスターのpgAdminを使用してデータベースにアクセスする

  3. 3

    複数の配列オブジェクトを使用してJSONデータにアクセスする方法:android

  4. 4

    Django-複数のデータベースの値にアクセスする

  5. 5

    MySQLWorkbenchを使用してLightsailインスタンスのデータベースにアクセスする

  6. 6

    同じデータベースにアクセスする複数の外部データベースのIstioServiceEntry

  7. 7

    VSデータセットを使用してMSSQLデータベースへの複数のアクティブな接続を許可する

  8. 8

    UICollectionのセクションを使用してデータベースにアクセスする

  9. 9

    ipythonを使用してmpiクラスター内の複数のノードにアクセスする

  10. 10

    WordPressのwpdbクラスを使用して外部データベースにアクセスする

  11. 11

    PHPを使用してクライアントのSQLデータベースにアクセスする

  12. 12

    Linuxターミナルを使用してWindows上のSQLデータベースにアクセスする

  13. 13

    Access を使用してサード パーティのデータベースにアクセスする方法

  14. 14

    codeigniterを使用してデータベースに複数のカートアイテムを追加する方法

  15. 15

    laravel5.7を使用して複数の画像をデータベースにアップロードする

  16. 16

    コルーチンを使用してUnityのSQLiteデータベースにアクセスする

  17. 17

    複数のクラスを介してreactjsデータにアクセスする

  18. 18

    異なるサーバーとの複数のデータベース接続を使用して、多対多の関係のリレーショナルデータにアクセスします

  19. 19

    kubectlを使用して複数のkubernetesクラスターに適切にアクセスする方法

  20. 20

    phpmyadminを使用してMySQL以外のデータベースにアクセスすることは可能ですか?

  21. 21

    phpを使用してmysqlデータベースから特定の値にアクセスする方法は?

  22. 22

    データベース文字列を使用してファイルにアクセスする際の問題

  23. 23

    テキストボックスからデータを挿入して、c#のwhereを使用してデータベースにアクセスする方法

  24. 24

    文字列のリストを使用してRのデータフレーム変数にアクセスする

  25. 25

    Laravelの画像を使用して複数のデータをデータベースに挿入する

  26. 26

    VBAアプリケーションにアクセスします。複数のデータベースを閉じるのをやめます

  27. 27

    zeepを使用してデータベースにアクセスする

  28. 28

    javascriptを使用してJSONデータベースにアクセスする方法

  29. 29

    Clojureを使用してデータベースにアクセスする

ホットタグ

アーカイブ