我還希望通過Seed方法轉換遷移文件中的數據。
更新數據不應該是一個問題,你可以做如下圖所示的代碼行,你也可以從C#傳遞參數的SQL字符串:
Sql("UPDATE TableName SET MyValueInMinutes= -DATEDIFF(MINUTE, CurrentTime, 0)";
的問題,通過數據閱讀!實際上,您將永遠不需要處理C#中的數據轉換,通常您可以在SQL Server中創建所有內容(存儲過程和函數以及SQL stametents),並且您可以在需要時或在需要時在遷移文件中調用它們數據已準備好被轉換。但是我認爲你不是數據庫程序員,那就是你試圖在C#中處理數據的原因。
這裏是一個如何遍歷行的例子,我將搜索給定的文本併爲您找到一個免費的'AnyText'+ Counter。
CREATE PROCEDURE sp_FindFreeName
@toBeFindName nvarchar(MAX) OUT
AS
BEGIN
DECLARE @LoopCounter INTEGER
SET @LoopCounter = 1
WHILE EXISTS (SELECT @toBeFindName FROM dbo.MyTable WHERE Name = @toBeFindName)
BEGIN
SET @toBeFindName = 'AnyText', @LoopCounter)
SET @LoopCounter = @LoopCounter + 1
END
END
然後你就可以稱爲形式C#:
var cSharpName = string.Empty;
Sql("exec sp_FindFreeName @[email protected]"+ cSharpName +" OUTPUT");
從C#哪裏cSharpName給出。
第三個爲什麼要這樣做,你也可以編寫自己的代碼優先遷移操作。你必須確定你的SqlServerMigrationSqlGenerator在羅文博客描述:
https://romiller.com/2013/02/27/ef6-writing-your-own-code-first-migration-operations/
結論:
如果你真的想在遷移文件讀取數據,那麼你必須使用例如:SqlDataReader,你也必須從App.config中讀取連接字符串。
在大多數情況下,您可以在SQL Server中執行所有操作。只需創建您的數據傳輸SQL腳本並從所需的位置執行它們即可。
您可以使用Extensions和SqlServerMigrationSqlGenerator以更清晰的方式執行DataReader。
感謝您的回答。正如你猜測的那樣,我對SQL不太習慣(也不是我的同事),而且,我想我可以用SQL編寫整個網站,但我們選擇C#作爲一個更方便除簡單的數據庫查詢之外的任何語言(例如解析HTML,包括格式錯誤的HTML)。我會看看遷移操作',但乍一看,他們不提供數據庫連接(你可以盲目地導出SQL字符串?)。如果可能的話,我想避免爲數據庫創建一個獨特的連接/事務。 – youen
@youen然後使用種子方法進行遷移。種子方法在每次遷移級別遷移期間將被稱爲X時間。使用If esle ...找到你當前工作的級別,然後你可以在C#中使用非常簡單的方式來添加,刪除或更新數據。如果這能解決你的問題,請不要忘記投票並回答問題^^ –
@youen有一件事情仍然很重要,有兩種類型的種子方法,一種用於初始化,另一種用於遷移。使用遷移種子,閱讀此PLZ https://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/ –