2012-09-24 15 views
0

我有一個項目,我使用Fluent NHibernate映射SQL Server數據庫,並從另一個Fluent NHibernate映射SQL Server數據庫生成數據庫,這是我們的源。在SQLite中處理「模式」單元測試

我目前正在編寫一些單元測試,它將檢查從一個數據庫中讀取的函數並在另一個數據庫中創建記錄。 我創建了一個用於創建記錄的我的數據庫的內存SQLite數據庫,它工作正常。但是當我嘗試爲我的「源」數據庫創建一個類似的SQLite數據庫時,我遇到了聲稱「沒有這樣的表」的失敗。

這似乎是因爲在源流數據庫的Fluent NHibernate dll中,他們給了像「dbo.table」這樣的名稱,並且由於我的SQLite測試數據庫中沒有模式,所以無法創建測試表。

有沒有辦法處理這個「dbo」。創建測試數據庫時SQLite中的名稱?

回答

1
SELECT * from dbo.mytable 

是一樣的:

SELECT * from "dbo"."mytable" 

爲了使這項工作,你需要attach另一個數據庫命名爲dbo,就像這樣:

ATTACH DATABASE ':memory:' AS dbo 

或者,換表名在引號中(如果NHibernate可能的話),這樣該點就是表名的一部分:

SELECT * FROM "dbo.mytable" 
0

您可以將代表傳遞給SchemaExport.Execute以修改腳本調用。將執行參數設置爲false,你可以修改腳本的線條和自己打電話給他們:

schemaExport.Execute(script => { using (var cmd = session.Connection.CreateCommand()) { cmd.CommandText = script.Replace("dbo.", "dbo_"); cmd.ExecuteNonQuery(); } }, false, false, exportSchemaOutput);

(我假設你已經調用的ISession對象)。