Pregunta

¿Cómo puedo ejecutar una instrucción DDL mediante NHibernate?

Para que quede claro, yo No que desee generar automáticamente mi esquema de mis archivos de asignación. Mi DDL se almacena en archivos de texto plano a lo largo de las líneas de:

CREATE TABLE Foo (Bar VARCHAR(10))
GO
CREATE TABLE Hello (World INTEGER)
GO

Quiero ciclo a través de estos con el fin y ejecutar cada uno de ellos. Tan sólo pudiera abrir una SqlConnection y ejecutar a través de un SqlCommand pero me gustaría ir a través de NHibernate si hay una buena manera de hacer esto. Esto es principalmente porque quiero seguir siendo agnóstico base de datos como sea posible: Tengo una base de datos SQL ahora, pero puede ser que necesite para implementar Oracle o DB2 después ...

Estoy usando v3.51 y .Net v2.1 NHibernate. Miré a la clase NHibernate SchemaExport pero no pude ver una manera de utilizar esto para este propósito.

¿Fue útil?

Solución

Se puede obtener una IDbConnection de la propiedad de conexión de un ISession pero tendrá que hacer esto con SqlCommand. Ejecución de DDL está fuera del alcance de NHibernate.

Otros consejos

He usado session.Connection.CreateCommand y session.Transaction.EnlistCommand antes con éxito para ejecutar SQL prima.

He aquí un fragmento de algo similar que he hecho:

using (var command = _session.Connection.CreateCommand())
{
    _session.Transaction.Enlist(command);
    command.CommandText = "select foo from bar where id = @id";
    var versionIdParameter = command.CreateParameter();
    versionIdParameter.ParameterName = "id";
    versionIdParameter.Value = id;
    command.Parameters.Add(versionIdParameter);
    using(var reader = command.ExecuteReader(CommandBehavior.SequentialAccess))
    {
        while (reader.Read())
        // ...
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top