簡體   English   中英

使用Entity Framework 6 Code First創建SQL視圖

[英]Create SQL View With Entity Framework 6 Code First

我是Entity Framework 6 Code First的新手,我正在嘗試執行我認為簡單的任務。 我想創建一個SQL視圖,然后在我的數據庫上下文中有一個Entity,我可以使用它來查詢視圖。

我曾嘗試如文章但對我來說最關鍵的區別是,SQL視圖是不是從另一個現有的數據庫即將現有視圖。

我檢查了本文中提出的命題,但對我來說似乎有點過分,我需要創建一些擴展方法來做一些簡單的事情,比如創建一個視圖/實體組合並在我的數據庫上下文中使用它。

我錯過了什么嗎? 我知道如果我不使用Code First會更容易,但請記住它是Code First,我正在嘗試創建一個視圖,而不是重用現有數據庫中的視圖。

科林和凱文,感謝您在另一篇文章中找到答案的鏈接和簡明的答案。 我已經使用了幾個資源來最終基於新的SQL視圖創建可查詢實體。 為了防止其他人對EF 6.0 Code First不熟悉並且剛剛開始行動,我確實會采取一些措施,希望將來能夠讓其他人受益。

  1. 對於經驗豐富的實體框架開發人員來說,這似乎是顯而易見的,但是為了執行“遷移”方法,您需要禁用自動遷移,並實際深入了解Code First Migrations內部工作的內容。 由於自動遷移是開箱即用的,我已經使用種子腳本創建了一個相當復雜的數據庫,所有這些都依賴於自動遷移並在每次運行我的應用程序時重建數據庫。 這篇文章幫助我擦除了我的遷移歷史,並在關閉自動遷移的情況下進入了方塊1(我使用web.config方法,以防您想知道)
  2. 在我清除了遷移信息之后,我從解決方案資源管理器中刪除了mdf。 這保證了在運行Update-Database時不會遇到任何問題(在步驟列表的下方)。
  3. 在Package Manger控制台中,我然后執行Add-Migration Initial以生成“初始”遷移。 結果是Colin的答案中描述的可編輯的Up和Down方法。 然后,我通過注釋掉表創建語句(實體框架嘗試創建一個表但我們真的想要創建一個視圖並將其映射到實體)並插入我自己的視圖創建sql語句然后按照科林的答案中的步驟進行操作。 Up方法。 在創建可能依賴的任何表之后放置create語句非常重要。 我還在Configuration.Seed方法中執行了Seed活動,而不是在Context的Seed方法中。 我知道如果您處理多個遷移,這將是多么重要。 最后,正如Colin建議我將表映射添加到我的上下文的OnModelCreating事件中。
  4. 最后一步是將遷移實際應用於數據庫。 為此,請在程序包管理器控制台中執行Update-Database命令。 該語句將使用您在先前步驟中創建和編輯的“初始”遷移重建數據庫。

我仍然感到驚訝的是,我需要完成所有這些自定義工作來創建視圖並將其映射到具有Code First的實體,但在一天結束時,它有助於我開始遷移,因為您只能依賴無論如何,“自動遷移”已經很久了。

您可以手動添加sql以創建遷移視圖,然后根據您的第一個鏈接使用它。

科林提供的鏈接中的答案完成了這項工作。

如果要創建大量視圖,最好將視圖查詢保存在單獨的文件中,並將它們添加到資源(.resx)文件中,而不是在Migration Up()中對sql查詢進行硬編碼方法。

例如

public override void Up()
{
    Sql("ResourceFileName.ResourceName");
}

而不是硬編碼

{
        Sql("EXEC ('CREATE View [dbo].[ClientStatistics] AS --etc");
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM