2012-08-29 30 views
0

我們有自定義代碼,它通過創建一些對象並將它們保存到DatabaseContext(我們對模式使用Migrations,但對數據不使用)來擦除和初始化我們的測試數據庫。但是,我們的測試人員創建了更多的數據,並且在我們進行乾淨部署時不想丟失測試數據。因此我必須弄清楚如何從SQL Server獲取數據到C#中(一旦關閉),因此它將與我們的數據初始化程序一起運行。如何從SQL Server中一次性填充一組實體框架代碼POCOS(一次性關閉)?

我最初的方法是手動複製粘貼數據到C#對象初始化,但是這個上了年紀快,因爲有超過100行復制。

我的第二種方法是在SQL Server中使用SELECT語句創建對象,將C#初始化程序語法混合到SQL SELECT語句中,然後將由SQL Server生成的C#字符串複製回Visual Studio。

雖然第二種方法看起來不錯,但我不知道是否有一個明顯的解決方案(除了簡單的運行每次SQL INSERT腳本),我很想念。

回答

1

我最終採用了問題中提到的方法。在SQL Select語句中生成C#對象初始化程序。

有幾件事情我拿起,大多是很明顯的:

  • 強制轉換爲VARCHAR的所有數字字段(雖然如果你沒有SQL Server將給出錯誤)。

  • 日期:轉換爲VARCHAR,並與DateTime.Parse()

  • 使用圍繞一個CASE語句SQL布爾值(1/0)轉換爲真/假爲字符串。

  • 枚舉:生成石膏。

  • 如果使用自動編號的ID,記住了單詞字母前綴實例名稱。將對象初始化後添加到DataContext中。

不要害怕在生成的代碼中引用您的C#代碼。無論如何,它都不會在SQL Server中運行。

+0

兩個月,我有一個額外的觀察: 有被引入到數據的各種調整和行被排除在外。最初,我修改了生成的代碼,但後來發現更改底層SQL使得它更容易控制(這通常被認爲是最佳實踐,但在這種情況下,它已被驗證)。我同意一般人的觀點,即對修改生成的代碼應該非常謹慎。 – Jtrx

0

我只是創建一個SQL腳本來重新創建數據庫中的數據。
您可以通過命令行或通過C#運行此腳本...

+0

這是我考慮過的一個選項,但有人向我指出,在這種情況下重構實體並不是無縫的。 – Jtrx

0

您確實有其他選擇。備份測試數據庫,將該備份加載到與目標數據庫相同的服務器上的新數據庫中,並在遷移完成時(包括清除數據庫)發出跨數據庫INSERT...SELECT語句。

這種方法的好處是,如果測試團隊得到另一個自己喜歡的版本,你可以把一個備份,並與讓他們不斷建立更多的數據覆蓋臨時數據庫。

相關問題