什麼是最好的,最一致的方式來檢查一個表是否存在於NHibernate(或與Fluent-NHibernate)?如何檢查NHibernate(或Fluent)是否存在表?
這有可能嗎?我的意思是這對於這樣一個重型ORM來說似乎是一個簡單的任務。
同樣在相關的問題上,你可以檢查一組表或整個模式是否存在與NHibernate?
什麼是最好的,最一致的方式來檢查一個表是否存在於NHibernate(或與Fluent-NHibernate)?如何檢查NHibernate(或Fluent)是否存在表?
這有可能嗎?我的意思是這對於這樣一個重型ORM來說似乎是一個簡單的任務。
同樣在相關的問題上,你可以檢查一組表或整個模式是否存在與NHibernate?
如果您保存您的NHibernate配置的地方或做你建立你的會話工廠之前,可以驗證所生成針對數據庫的模式。
public void ValidateSchema(Configuration config)
{
new SchemaValidator(config).Validate();
}
不錯,我正在尋找這樣的事情 – 2009-10-14 19:14:47
我查看了SchemaUpdate的源代碼。我知道SchemaUpdate可以檢測到缺少的表,然後生成一個創建腳本,而不是一個更新腳本。果然,答案就在那裏。
在NHibernate.Tool.hbm2ddl.DatabaseMetadata
對象的GetTableMetadata
函數將返回null如果表中不存在數據庫。
通常情況下,SchemaUpdate會創建一個DatabaseMetadata對象並將其傳遞給一個Configuration
對象。但它看起來像創建DatabaseMetadata所需的只是一個DBConnection和Dialect對象。
SchemaUpdate工具創建一個DatabaseMetaData正是如此:
connectionHelper.Prepare();
connection = connectionHelper.Connection;
meta = new DatabaseMetadata(connection, dialect);
NHibernate.Cfg.Configuration
然後調用
ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(...);
這個問題和應對谷歌這樣的解決搜索時彈出無處不在,所以我想我會放什麼更精確和簡潔的工作[由於問題的年齡,很可能是另外]我方式; 「IsTable」:
var configuration = Fluently.Configure()
.Database(MsSqlConfiguration
.MsSql2008
...
.BuildConfiguration();
var session = configuration.BuildSessionFactory().OpenSession();
DatabaseMetadata meta = new DatabaseMetadata((DbConnection)session.Connection, new NHibernate.Dialect.MsSql2008Dialect());
//TABLE_NAME e.g. "hibernate_unique_key"
if (meta.IsTable("TABLE_NAME"))
{
...
希望幫助別人,因爲我實現了絆腳石上在此之前類似上述一個令人費解的戰略;)
您是否希望檢查一下對你的映射? – 2009-10-13 00:05:11
無論如何,我想看看物理表是否存在。 – 2009-10-13 01:39:53