3

NHibernateを介してDDLステートメントを実行するにはどうすればよいですか?

明確にするために、マッピングファイルからスキーマを自動生成したくありません。私のDDLは、次の行に沿ってプレーンテキストファイルに保存されます。

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

これらを順番に順番に実行して、それぞれを実行したいと思います。SqlConnectionを開いて、SqlCommandを介して実行することもできますが、これを行うための優れた方法がある場合は、NHibernateを実行したいと思います。これは主に、データベースにできるだけ依存しないようにしたいためです。現在SQL DBを使用していますが、後でOracleまたはDB2を実装する必要があるかもしれません...

.Netv3.51とNHibernatev2.1を使用しています。NHibernate SchemaExportクラスを見ましたが、この目的でこれを使用する方法がわかりませんでした。

4

2 に答える 2

3

私はこれまでsession.Connection.CreateCommandsession.Transaction.EnlistCommand生のSQLを実行することに成功しました。

これが私がやったのと似たようなものの抜粋です:

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())
        // ...
    }
}
于 2010-01-07T19:50:36.753 に答える
2

IDbConnectionはISessionのConnectionプロパティから取得できますが、これはSqlCommandを使用して行う必要があります。DDLの実行はNHibernateの範囲外です。

于 2010-01-07T19:46:17.827 に答える