簡體   English   中英

使用NHibernate執行DDL語句

[英]Using NHibernate to execute DDL statements

如何通過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類,但看不到將此用於此目的的方法。

我成功運行原始SQL之前使用了session.Connection.CreateCommandsession.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())
        // ...
    }
}

您可以從ISession的Connection屬性獲取IDbConnection,但是您需要使用SqlCommand執行此操作。 執行DDL超出了NHibernate的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM