0

我現在正嘗試構建一個控制檯應用程序,我可以在其中插入一些數據到我的數據庫並將sql輸出到文件中一個額外的。我的想法是,我可以使用這些數據遷移或類似的東西。從Entity Framework中生成可用於數據遷移的可用sql

我有幾個查找表,我想預先填充數據,我認爲這比手寫sql更好。如果有人需要查看價值,那麼它就在代碼中。

我使用EF Tracing什麼,我已經走到這一步,讓我來記錄SQL實體框架通過執行以下操作

我迷上到他們的行動創造以訪問跟蹤

private void WriteSqlToString(CommandExecutionEventArgs args) 
{ 
    sqlTrace.Append(args.ToTraceString()); 
} 

其中給出這樣的事情

insert [dbo].[Members]([EmailAddress], [FirstName], [LastName]) 
values (@0, @1, @2) 
select [Id] 
from [dbo].[Members] 
where @@ROWCOUNT > 0 and [Id] = scope_identity() 
-- @0 (dbtype=String, size=60, direction=Input) = "[email protected]" 
-- @1 (dbtype=String, size=-1, direction=Input) = "TestFirstName" 
-- @2 (dbtype=String, size=-1, direction=Input) = "TestLastName" 

我會是第一個牽我的手,因爲我不擅長手工編寫SQL。我搞砸了這一點,試圖讓它在sqlserver express中執行,但由於未聲明變量而不斷髮生錯誤。

是否有人認爲值得繼續嘗試使這個工作或我錯過了一個更好的解決方案嗎?


這裏的一些代碼的參考

public void CreateSqlFile() 
{ 
    using (MyContext context = tracingContextFactory.Create(WriteSqlToString)) 
    { 
     Migrate(context); 
     context.SaveChanges(); 
    } 

    StreamWriter file = new StreamWriter(migrationPath); 
    file.WriteLine(sqlTrace.ToString()); 
    file.Close(); 
} 
+0

如果你想成爲一名程序員,值得你學習如何編寫sql。我聽說過這本書的好處,在10分鐘內自學SQL。 –

+0

我知道SQL到一個合理的水平,但在每天的基礎上,我會說我寫一些也許每6個月一次。這只是一個數據輸入的情況,爲什麼不嘗試編寫一個程序,這樣我就不必編寫sql,並讓它通過驗證編譯器和EF在由attribution提供的內置數據驗證中進行驗證。此外,正確的intellisense額外獎金。但是,嘿,如果手動數據輸入是你的東西,那麼就有它。 – Neil

回答

1

從EF生成的SQL是功能性的,但它通常是過於複雜和格式錯誤。

這對EF來說很好,因爲沒有人看到SQL。

但是,如果您要使用或試圖修改SQL,我會選擇其他路線。例如,如果您嘗試進行數據遷移,那麼我會查看SQL Server Integration Services(SSIS)。

編輯

要生成的數據在服務器之間傳輸,在SQL Server Management Studio中,

  • 右擊數據庫,
  • 點擊生成腳本。
  • 請選擇您的表格。
  • 在下一個屏幕上,選擇高級選項
  • 在「腳本數據類型」中,選擇「僅數據」。 (或架構和數據,如適用)
  • 繼續嚮導結束
  • 成功。
+0

我真的只對它有功能感興趣。例如,我有一個查詢表,其中有200個條目。而不是在sql中輸入,我希望能夠在代碼中定義,然後將sql輸出到一個將作爲我的數據庫遷移的一部分運行的文件。我懷疑很多人會讀它。 – Neil

+0

@尼爾啊。請參閱上面的編輯。 – podiluska

+0

謝謝,這是一個很好的解決方案,只是一個恥辱,它不能真正自動化 – Neil

相關問題