在过去的几天里,我一直在敲墙,为什么我会出现这种奇怪的行为
我尝试了以下两种设置
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.NativeDriver.GetResult 的 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 selection,ISessionImplementor session) 在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) 在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) 在 NHibernate.Loader.Loader.DoList(ISessionImplementor session , 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_。 Recruiter 作为 Recruiter0_0_, this_.Salt 作为 Salt0_0_ FROM
Account
this_ WHERE this_.Username = ?p0 ]
所以我可以看到自动映射它的类到数据库。
我想使用自动映射,因为我在一台服务器上使用 3 个不同的数据库,具体取决于数据的位置,所以我有不同命名空间中的类,希望根据命名空间拉 3 个不同的会话工厂,就像第二个一样.