.Net + Nhibernate + MySQL Connector 6.3.5 = Valor no puede ser nulo de error
-
28-09-2019 - |
Pregunta
Tengo una sencilla prueba de sanidad de integración para demostrar que mis asignaciones están trabajando, que originalmente estaba usando un servidor de base de datos MsSQL, pero ahora han añadido soporte para MySQL (o al menos yo pensaba que tenía) pero seguir recibiendo la siguiente de error cuando cargo el archivo nhibernate.cfg.xml arriba.
Configuración: System.ArgumentNullException:. El valor no puede ser nulo
Nombre del parámetro: corriente
Aquí está el fichero de configuración:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- Connection config -->
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="connection.connection_string">Server=localhost;Database=xxxxx;User ID=root;</property>
<property name="show_sql">true</property>
<!-- Mapping config -->
<mapping assembly="xxxxx.xxxxx"/>
</session-factory>
</hibernate-configuration>
Los interwebs parecen tener algo de información sobre este ser un problema MySQL Connector, pero sólo en las versiones anteriores a 6.1, y no existen soluciones que encontré, la gente diciendo a la actualización. Sin embargo Im en la versión más reciente. Cualquier ayuda sería grande!
Editar ** **
Aquí está el seguimiento de la pila en caso que ayuda a diagnosticar el problema subyacente:
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(Stream stream)
at MySql.Data.MySqlClient.SchemaProvider.GetReservedWords()
at MySql.Data.MySqlClient.SchemaProvider.GetSchemaInternal(String collection, String[] restrictions)
at MySql.Data.MySqlClient.ISSchemaProvider.GetSchemaInternal(String collection, String[] restrictions)
at MySql.Data.MySqlClient.SchemaProvider.GetSchema(String collection, String[] restrictions)
at MySql.Data.MySqlClient.MySqlConnection.GetSchema(String collectionName, String[] restrictionValues)
at MySql.Data.MySqlClient.MySqlConnection.GetSchema(String collectionName)
at NHibernate.Dialect.Schema.AbstractDataBaseSchema.GetReservedWords()
at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect dialect, IConnectionHelper connectionHelper)
at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory sessionFactory)
at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at xxxxx.unittests.logic.mappings.MappingSanityTests.PreTestSetup() in C:\Documents and Settings\xxxxx\My Documents\Projects\Other\xxxxx\src\tests\xxxxx.integrationtests\logic\mappings\MappingSanityTests.cs:line 22
Solución
Después de mirar alrededor de la una red poco más he encontrado un puesto solitario en los foros Nhibernate que se fija mi problema, no saben por qué sinceramente las palabras clave son un problema, pero im no va a discutir con él.
<property name="hbm2ddl.keywords">none</property>
poner esto en su archivo de configuración dentro de su fábrica de sesión y todos los que todas las jugadas muy bien juntos.
Otros consejos
Sólo una suposición. El nombre de argumento "corriente" asume que algo se deserialized. Si el mapeo de montaje que están proporcionando no existe, puede ser nulo. Sólo trate de quitar el elemento de mapeo para ver si no se traduce en el mismo error.
Si se trata de algo más, echar un vistazo a la traza de la pila o de depuración en código NH encontrar el lugar donde entra el error.