使用NHibernate执行DDL语句
-
19-09-2019 - |
题
我如何通过NHibernate的执行DDL语句?
需要明确的是,我不要自动生成我的架构从我的映射文件。我的DDL被存储在纯文本文件沿着线:
CREATE TABLE Foo (Bar VARCHAR(10))
GO
CREATE TABLE Hello (World INTEGER)
GO
我想通过这些循环,以便和执行它们。我可以只打开一个SqlConnection,并通过一个SqlCommand执行,但我想经过NHibernate的,如果有一个很好的办法做到这一点。这主要是因为我想继续作为数据库无关地:我有一个SQL数据库,但现在我可能需要实现Oracle或DB2后...
我使用的.Net V3.51和NHibernate V2.1。我看了看NHibernate的SchemaExport工具类,但不能找到一种方式来使用这个目的。
解决方案
您可以从一个ISession的连接财产的IDbConnection但你需要的SqlCommand做到这一点。执行DDL是NHibernate的范围之外。
其他提示
我用session.Connection.CreateCommand
和session.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())
// ...
}
}
不隶属于 StackOverflow