ここ数日、なぜこのような奇妙な振る舞いをするのか頭を悩ませていました
次の2つの設定を試しました
1:
return _sessionFactory ??
(_sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(cs =>cs.Server("127.0.0.1").Database("azeroth").Username("root").Password("password")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Database>())
.BuildSessionFactory()
);
2:
return _sessionFactory ??
(_sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(cs => cs.Server("127.0.0.1").Database("azeroth").Username("root").Password("password")))
.Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Database>().Where(t => t.Namespace.StartsWith("Azeroth.Database.Auth"))))
.BuildSessionFactory()
);
データベースに使用されているクラスに、Azeroth.Database.Auth で始まる名前空間があることを確認しました。
#1を使用すると、すべてが完璧に機能し、データベースを照会/追加/削除/更新できます。
#2を使用すると、すべてのデータベース操作で例外が発生します-クエリを実行できません-。
自動マッピング行が機能しないのにマッピング行が機能する理由について、誰かが光を当てることができることを願っています。
これは例外の出力です。
NHibernate.Exceptions.GenericADOException: MySql.Data.MySqlClient.MySqlStream.ReadPacket() でクエリを実行できませんでしたInt32 statementId、Boolean force) で MySql.Data.MySqlClient.MySqlDataReader.NextResult() で MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 動作) で MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior 動作) System.Data で.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) NHibernate.Loader.Loader.GetResultSet(IDbCommand st、Boolean autoDiscoverTypes、Boolean callable、RowSelection 選択、NHibernate.Loader.Loader.DoQuery(ISessionImplementor セッション、QueryParameters queryParameters、Boolean returnProxies) の NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor セッション、QueryParameters queryParameters、ブール値の returnProxies) , QueryParameters queryParameters) --- 内部例外スタック トレースの終了 ---QueryParameters queryParameters) --- 内部例外スタック トレースの終了 ---QueryParameters queryParameters) --- 内部例外スタック トレースの終了 ---
[ this_.Id を Id0_0_ として、this_.Username を Username0_0_ として、this_.Sha_Pass_hash を Sha3_0_0_ として、this_.Email を Email0_0_ として、this_.Joindate を Joindate0_0_ として、this_.LaspIp を LaspIp0_0_ として、this_.FailedLogins を FailedLo7_0_0_ として、this_.Locked を Locked0_0_ として選択し、 this_.LastLogin は LastLogin0_0_、this_.Online は Online0_0_、this_.Expansion は Expansion0_0_、this_.Mutetime は Mutetime0_0_、this_.Mutereason は Mutereason0_0_、this_.Muteby は Muteby0_0_、this_.Locale は Locale0_0_、this_.Os は Os0_0_、this_.リクルーターとして Recruiter0_0_, this_.Salt as Salt0_0_ FROM
Account
this_ WHERE this_.Username = ?p0 ]
したがって、クラスをデータベースにマッピングする自動マッピングで確認できます。
データの場所に応じて1つのサーバーで3つの異なるデータベースを使用しているため、自動マッピングを使用したいので、2番目のように名前空間に基づいて3つの異なるセッションファクトリをプルすることを望んでいる異なる名前空間にクラスがあります.