DDL文を実行するためにNHibernateはを使用しました
-
19-09-2019 - |
質問
私はNHibernateは介して、DDL文を実行できますか?
明確にするために、私は私のマッピングファイルから私のスキーマを自動生成したくないのです。私のDDLは、の線に沿ってテキストファイルに保存されます:
CREATE TABLE Foo (Bar VARCHAR(10))
GO
CREATE TABLE Hello (World INTEGER)
GO
私がためにこれらを順番にしたいし、それらのそれぞれを実行します。私はただのSqlConnectionを開き、SqlCommandオブジェクトを介して実行されるが、これを行うには良い方法があれば、私はNHibernateは通過したいことができます。私はできるだけ依存しないデータベースとして残るしたいので、これは主に次のとおりです。私は今、SQL DBを持っているが、私は、後にOracleまたはDB2を実装する必要があるかもしれません...
私は、.NET V3.51とNHibernateはv2.1のを使用しています。私はNHibernateはSchemaExportのクラスに見えたが、この目的のためにこれを使用する方法を見ることができませんでした。
解決
あなたはISessionの接続のプロパティからのIDbConnectionを取得することができますが、SqlCommandオブジェクトでこれを行う必要があります。 DDLを実行すると、NHibernateのの範囲外である。
他のヒント
私は生のSQLを実行するための成功を前にsession.Connection.CreateCommand
とsession.Transaction.EnlistCommand
を使用しました。
ここで私がやったことを、何かのスニペット似ています:
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())
// ...
}
}
所属していません StackOverflow