No estoy seguro si estoy haciendo la pregunta correcta, así que por favor tengan paciencia conmigo! Un poco de NHibernate noob.Fluido NHibernate - PersistenciaEspecificación del esquema HiLo
Estamos utilizando Fluido NH y tienen el siguiente esquema de generación de ID para todas las tablas
public class IdGenerationConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
var where = string.Format("TableKey = '{0}'", instance.EntityType.Name);
instance.GeneratedBy.HiLo("HiloPrimaryKeys", "NextHighValue", "1000", x => x.AddParam("where", where));
}
}
Tenemos una secuencia de comandos SQL que genera la tabla HiloPrimaryKeys
y la siembra de datos con el cual es ejecutado durante el despliegue. Esto está funcionando bien.
Ahora estoy tratando de escribir pruebas unitarias para verificar nuestra capa de persistencia, idealmente usando SQLite en la configuración de memoria para la velocidad. Así es como puedo configurar NH para las pruebas:
[SetUp]
public void SetupContext()
{
config = new SQLiteConfiguration()
.InMemory()
.ShowSql()
.Raw("hibernate.generate_statistics", "true");
var nhConfig = Fluently.Configure()
.Database(PersistenceConfigurer)
.Mappings(mappings =>
mappings.FluentMappings.AddFromAssemblyOf<DocumentMap>()
.Conventions.AddFromAssemblyOf<IdGenerationConvention>());
SessionSource = new SessionSource(nhConfig);
Session = SessionSource.CreateSession();
SessionSource.BuildSchema(Session);
}
El problema es que no sé cómo decirle a NHibernate acerca de nuestro script de implementación para que genere los datos del esquema y de semillas correctas durante las pruebas.
El problema específico que se ve es cuando se ejecuta la siguiente prueba PersistenceSpecification
:
[Test]
public void ShouldAddDocumentToDatabaseWithSimpleValues()
{
new PersistenceSpecification<Document>(Session)
.CheckProperty(x => x.CreatedBy, "anonymous")
.CheckProperty(x => x.CreatedOn, new DateTime(1954, 12, 23))
.CheckProperty(x => x.Reference, "anonymous")
.CheckProperty(x => x.IsMigrated, true)
.CheckReference(x => x.DocumentType, documentType)
.VerifyTheMappings();
}
que arroja la siguiente excepción:
TestCase ... failed:
Execute
NHibernate.Exceptions.GenericADOException:
could not get or update next value[SQL: ]
---> System.Data.SQLite.SQLiteException: SQLite error
no such column: TableKey
Así que mi deducción es que no se ejecute el script de implementación al verificar la especificación de persistencia.
¿Existe una solución existente para esta situación? Mi Google-fu parece haberme abandonado en este caso.
Sí, lo intenté, pero parece que 'PersistenceSpecification' solo funciona con el esquema generado por NH, no con las alteraciones que haya realizado (hasta donde sé) –