2012-03-28 41 views
1

我正在用NHibernate SchemaExport創建一個SQLite數據庫。我必須添加更新,刪除和插入觸發器到數據庫。這可能與NHibernate或我必須運行SQL腳本手動觸發器創建?通過NHibernate創建SQLite觸發器

回答

0

經過一番研究,我意識到可以獲得會話連接,並從那裏你可以運行任何你想要的DDL命令。在我的情況是:

 var commandText = new StringBuilder(); 
     var command = session.Connection.CreateCommand(); 
     commandText.AppendLine("CREATE TRIGGER books_insert_trg AFTER INSERT ON books "); 
     commandText.AppendLine("BEGIN"); 
     commandText.AppendLine("UPDATE books SET sort=title_sort(NEW.title),uuid=uuid4() WHERE id=NEW.id;"); 
     commandText.AppendLine("END"); 
     command.CommandText = commandText.ToString(); 
     command.ExecuteNonQuery(); 
2

您需要使用Auxiliary Database Objects

對於由代碼映射,你需要將它們直接添加到您從映射器編譯HbmMapping

mappingDocument.databaseobject = 
    new[] 
    { 
     new HbmDatabaseObject 
     { 
      Items = new object[] 
      { 
       new HbmCreate { Text = new[] { "CREATE TRIGGER ..." } }, 
       new HbmDrop { Text = new[] { "DROP TRIGGER ..." } } } 
      } 
    }; 
+0

是的,這似乎是更好的解決方案,將觸發器創建與映射一起使用。不過,我有一個問題。我使用的NHibernate 3.2與代碼映射(不流利的NHibernate),我無法弄清楚如何做到這一點。你有沒有機會一些示例代碼如何這沒有XML映射? – zszep 2012-03-31 05:46:12